JDBC的API介绍

JDBC的API介绍

1.JDBC的简单使用

  a.注册数据库驱动

  b.获取数据库连接

    获取连接的方式:1.通过DriverManger

            2.通过 DataSource

               * Mybatis框架提供了DataSourceFactory使用工厂模式用来创建数据源

              * JDBC API提供了DataSource两个比较重要的扩展  

                1.ConnectionPoolDataSource  支持缓存和复用Connection对象,能够很大程度上提升性能和伸缩性

                2.该实例返回的Connection对象能够支持分布式事务

  c.执行sql语句

    获取到Connection对象后,可以创建 1.statement接口  2.preparedStatement  3.CallableStatement

    Statement接口中定义了执行SQL语句的方法。这些方法不支持参数输入。PrepareStatement接口增加了设置SQL参数的方法。CallableStatement方法继承自PreparedStatement。再次基础上增加了调用存储过程以及检索存储过程调用结果的方法

    操作数据库的案例:

    

@Test
public void testJdbc() {
    // 初始化数据
    DbUtils.initData();
    try {
        // 创建DataSource实例
        DataSource dataSource = new UnpooledDataSource("org.hsqldb.jdbcDriver",
                "jdbc:hsqldb:mem:mybatis", "sa", "");
        // 获取Connection对象
        Connection connection = dataSource.getConnection();
        Statement statement = connection.createStatement();
        ResultSet resultSet = statement.executeQuery("select * from user");
        // 遍历ResultSet
        ResultSetMetaData metaData = resultSet.getMetaData();
        int columCount = metaData.getColumnCount();
        while (resultSet.next()) {
            for (int i = 1; i <= columCount; i++) {
                String columName = metaData.getColumnName(i);
                String columVal = resultSet.getString(columName);
                System.out.println(columName + ":" + columVal);
            }
            System.out.println("---------------------------------------");
        }
        // 关闭连接
        IOUtils.closeQuietly(statement);
        IOUtils.closeQuietly(connection);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
View Code

  d.处理Sql执行结果

  e.释放连接

 2.JDBC中的API

  1.JavaSQL包中API : 1.数据类型接口14种 、2.枚举类型、3.驱动类型、4.异常类

    重要的api:Connection、Statement、CallableStatement、PreparedStatement、DatabaseMetaData、ParameterMetaData、ResultSet、ResultSetMetaData、Wrapper

    Connection、Statement、ResultSet等接口都继承自Wrapper接口。这些接口都提供了对JDBC驱动类型的原始访问能力

    Wrapper提供了如下两个方法:

      •  <T> T unwrap(java.lang.Class<T> iface) throws java.sql.SQLException;   用于返回未经过包装的JDBC驱动的原始类型实例
      • boolean isWrapperFor(java.lang.Class<?> iface) throws java.sql.SQLException;   用于判断当前实例是否是JDBC驱动的某一个类型的包装类

  2.Connection:

  a.DriverManger:类通过Driver接口为JDBC客户端管理一组可用驱动程序实现,当客户端通过DriverManager类和数据库建立连接时,DriverManager类会根据getConnection的url找到对应的驱动实现类

  主要用于获取数据库连接和注册数据库驱动。常用方法:

    

registerDriver(java.sql.Driver driver)
getConnection(String url)
getConnection(String url,String user, String password)
getConnection(String url,java.util.Properties info) 

  b.DataSource接口:DataSource获取Connection的一种方式,必须包含一个无参数的构造方法

  UnpooledDataSource    PooledDataSource

 c.DriverAction接口:用于监听驱动类被解决注册的时间,是驱动提供者需要注意的范畴

 d.connection关闭:close()    isClose();

 3.Statement

  Statement接口中定义了执行SQL语句的方法。这些方法不支持参数输入。PrepareStatement接口增加了设置SQL参数的方法。CallableStatement方法继承自PreparedStatement。再次基础上增加了调用存储过程以及检索存储过程调用结果的方法

  

  4.ResultSet :执行的结果集,resultSet没有关闭时,对它的影响,会直接影响数据库

   resultset游标:ResultSet对象中维护了一个游标,游标指向当前数据行。当ResultSet对象第一次创建时, 游标指向数据的第一行。ResultSet接口中提供了一系列的方法,用于操作ResultSet对象中的游标

    a.游标可操作方式:1.默认类型 TYPE_FORWARD_ONLY:ResultSet不可滚动,游标只可向前移动。从第一行到最后一行。不允许向后移动,即只能使用resultSet接口的next()方法。

            2.TYPE_SCOROLL_INSENSITIVE游标可移动,可向前或者向后移动

   b.ResultSet并行性 :

    • CONCUR_READ_ONLY:表示只能从resultset对象中读取数据
    • CONCUR_UPDATABLE:表示既能从resultset中读取数据,又能更新数据

  c.ResultSet可保持性

    •       HOLD+CURSORS_OVER_COMMIT:当调用Connection对象的commit方法时,不关闭当前事务调用的resultset对象
    •       CLOSE_CURSORS_AT_COMMIT:当前事务创建的ResultSet对象,在事务提交后,会被关闭。对一些应用来说,能够提高系统系统

  d.ResultSet关闭:

    1. 调用ResultSet对象进行显示的关闭
    2. Collection对象被关闭
    3. 隐士关闭:1.相同的statement对象执行  2.可保持性设置为CLOSE_CURSORS_AT_COMMIT的

  5.DataBaseMetaData:用于提供底层数据源相关信息。该接口主要用于应用程序或者工具如何与底层数据源进行交互。该接口是由JDBC提供程序实现的

  对象创建:connection.getMetaData()

  接口作用:

    1.获取数据源信息

    2.确定数据源是否支持某一个特性或者功能

    3.获取数据源的限制

    4.确定数据源包含哪些SQL对象以及这些对象的属性  

    5.获取数据源对事物的支持

3.JDBC的事务

  何时开启一个事务是由JDBC提供程序决定的。或者数据库隐士决定的事务提交可通过connection.setAutoCommit设置是否手动提交

  隔离级别:事务隔离级别用于指定事务中对数据的操作对其他事务的可见性。不同的事务隔离级别能够解决不同的事务并发问题,与效率有关。Connection对象的默认事务隔离级别是由数据库驱动实现的。事务隔离级别可能造成的问题:脏读、不可重复读、幻读。

  事务的保存点:保存点通过在事务中标记1个中间的点来对事务进行更细粒度的控制,一旦设置保存点,事务就可以回滚到保存点,而不影响保存点之前的操作。DatabaseMetaData接口 提供了supportsSavepoints()方法,用于判断JDBC驱动是否支持保存点。

原文地址:https://www.cnblogs.com/yingxiaocao/p/13671311.html