无线&移动互联网技术研发

换位思考·····
posts - 19, comments - 53, trackbacks - 0, articles - 283
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

JDBC几个重要接口重点讲解

Posted on 2009-06-21 22:13 Gavin.lee 阅读(961) 评论(0)  编辑  收藏 所属分类: JDBC
在JDBC 中包括了两个包:java.sql和javax.sql。
        ① java.sql   基本功能。
           这个包中的类和接口主要针对基本的数据库编程服务,如生成连接、执行语句以及准备语句和运行批处理查询等。
           同时也有一些高级的处理,比如批处理更新、事务隔离和可滚动结果集等。
        ② javax.sql  扩展功能。
           它主要为数据库方面的高级操作提供了接口和类。
           如为连接管理、分布式事务和旧有的连接提供了更好的抽象,它引入了容器管理的连接池、分布式事务和行集等。

        API                                说明
    Connection                        与特定数据库的连接(会话)。能够通过getMetaData方法获得数据库提供的信息、 
                                              所支持的SQL语法、存储过程和此连接的功能等信息。代表了数据库。 

    Driver                                每个驱动程序类必需实现的接口,每个数据库驱动程序也都应该提供一个实现Driver接口的类。 

    DriverManager(Class)          管理一组JDBC驱动程序的基本服务。作为初始化的一部分,此接口会尝试加载 
                                              在”jdbc.drivers”系统属性中引用的驱动程序。只是一个辅助类,是工具。 

    Statement                            用于执行静态SQL语句并返回其生成结果的对象。 

    PreparedStatement             继承Statement接口,表示预编译的SQL语句的对象,SQL语句被预编译并且存储 
                                              在PreparedStatement对象中。然后可以使用此对象高效地多次执行该语句。 

    CallableStatement             用来访问数据库中的存储过程。它提供了一些方法来指定语句所使用的输入/输出参数。 

    ResultSet                         指的是查询返回的数据库结果集。 

    ResultSetMetaData             可用于获取关于ResultSet对象中列的类型和属性信息的对象。 

    注:除了标出的Class,其它均为接口。每个都是“java.sql.”包下的。


    1. Statement  —— SQL语句执行接口
       代表了一个数据库的状态,在向数据库发送相应的SQL语句时,都需要创建Statement接口或PreparedStatement接口。
       在具体应用中,Statement主要用于操作不带参数(可以直接运行)的SQL语句,比如删除语句、添加或更新。

    2. PreparedStatement:预编译的Statement
        第一步:通过连接获得PreparedStatement对象,用带占位符(?)的sql语句构造。
            PreparedStatement  pstm = con.preparedStatement(“select * from test where id=?”);
        第二步:设置参数
            pstm.setString(1,“ganbin”);//第一个字段是“ganbin”;需一个个字段写
        第三步:执行sql语句
            Rs  =  pstm.excuteQuery();
        statement发送完整的Sql语句到数据库不是直接执行而是由数据库先编译,再运行。每次都需要编译。
        而PreparedStatement是先发送带参数的Sql语句,由数据库先编译,再发送一组组参数值。(同构时不需重复编译)
        如果是同构的sql语句,PreparedStatement的效率要比statement高。而对于异构的sql则两者效率差不多。
        一般都用PreparedStatement代替Statement,因为它是类型安全的。Statement对参数类型不作检查,故不够安全。
            同构:两个Sql语句可编译部分是相同的,只有参数值不同。
            异构:整个sql语句的格式是不同的
        注意点:1、使用预编译的Statement编译多条Sql语句一次执行
              2、可以跨数据库使用,编写通用程序
              3、能用预编译时尽量用预编译
              4、如果第二个SQL语句与前一个是异构的,需要再次编译“ps = con.prepareStatement(sql);“

    3. ResultSet —— 结果集操作接口
       ResultSet接口是查询结果集接口,它对返回的结果集进行处理。ResultSet是程序员进行JDBC操作的必需接口。

    4. ResultSetMetaData —— 元数据操作接口
       ResultSetMetaData是对元数据进行操作的接口,可以实现很多高级功能。
       Hibernate运行数据库的操作,大部分都是通过此接口。可以认为,此接口是SQL查询语言的一种反射机制。
       ResultSetMetaData接口可以通过数组的形式,遍历数据库的各个字段的属性,对于开发者来说,此机制的意义重大。

       JDBC通过元数据(MetaData)来获得具体的表的相关信息,例如,可以查询数据库中有哪些表,表有哪些字段,以及字段的
       属性等。MetaData中通过一系列getXXX将这些信息返回给我们。     
       数据库元数据 Database MetaData 用connection.getMetaData()获得;包含了关于数据库整体元数据信息。
       结果集元数据 ResultSet MetaData 用resultSet.getMetaData()获得;比较重要的是获得表的列名,列数等信息。
                结果集元数据对象:ResultSetMetaData meta = rs.getMetaData();
                字段个数:meta.getColomnCount();
                字段名字:meta.getColumnName();
                字段JDBC类型:meta.getColumnType();
                字段数据库类型:meta.getColumnTypeName();

       数据库元数据对象:DatabaseMetaData dbmd = con.getMetaData();
                数据库名:dbmd.getDatabaseProductName();
                数据库版本号:dbmd.getDatabaseProductVersion();
                数据库驱动名:dbmd.getDriverName();
                数据库驱动版本号:dbmd.getDriverVersion();
                数据库Url:dbmd.getURL();
                该连接的登陆名:dbmd.getUserName();

只有注册用户登录后才能发表评论。


网站导航: