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(); } }
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关闭:
- 调用ResultSet对象进行显示的关闭
- Collection对象被关闭
- 隐士关闭: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驱动是否支持保存点。