zoukankan      html  css  js  c++  java
  • 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驱动是否支持保存点。

  • 相关阅读:
    JAVA的HashTable源码分析
    散列表
    JAVA的HashSet源码分析
    Java中HashMap源码分析
    MySQL max_allowed_packet设置及问题
    通过分析 JDK 源代码研究 TreeMap 红黑树算法实
    红黑树详解
    TreeMap源码分析
    Vector的浅析
    web.xml 配置中classpath: 与classpath*:的区别
  • 原文地址:https://www.cnblogs.com/yingxiaocao/p/13671311.html
Copyright © 2011-2022 走看看