JDBC高级

JDBC高级

1. JDBC事务管理

事务指的是逻辑上的一组操作,组成这组操作各个逻辑单元要么全都成功,要么全都失败。

事务的特性:原子性,一致性,隔离性,持久性

​ Connection对象
​ setAutoCommit(boolean flag) 将此连接的自动提交模式设置为给定状态。
​ commit() 使所有上一次提交/回滚后进行的更改成为持久更改,并释放此 Connection 对象当前持有的所有数据库锁。
​ rollback() 取消在当前事务中进行的所有更改,并释放此 Connection 对象当前持有的所有数据库锁。

2.连接池(DataSource)

​ 目的是为了节省创建连接和销毁连接所需要花费的时间 提高程序的执行效率

2.1 Druid

DruidDataSource
    创建连接池对象
        1:
            DruidDataSource d = new DruidDataSource();
            d.setDriverClassName();
            d.setUrl()
            d.setUserName()
            d.setPassword()
        2:    准备一个db.properties    
            Properties p = new Properties();
            p.load("src/db.properties"):
            DruidDataSource d = DruidDataSourceFactory.createDataSource(p);

2.2 C3P0

1
2
3
4
5
6
7
8
9
10
11
C3P0
1:
ComboPooledDataSource d = new ComboPooledDataSource();
d.setDriveClass()
d.setJdbcUrl()
d.setUser()
d.setPassword()

2: 在src下面 准备c3p0-config.xml
ComboPooledDataSource d = new ComboPooledDataSource();
ComboPooledDataSource d = new ComboPooledDataSource(String DataSource);//"指定名称的连接池"

2.3 JDBCUtils

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.sql.Connection;
import java.sql.SQLException;

import org.apache.tomcat.jdbc.pool.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class JDBCUtils {
private static final ComboPooledDataSource d = new ComboPooledDataSource();

public static Connection getConnection() throws SQLException{
return d.getConnection();
}

public static ComboPooledDataSource getDataSource(){
return d;
}
}

3. DButils工具类

DButils工具类

​ QueryRunner
​ QueryRunner() 需要事务管理
​ QueryRunner(DataSource ds) 不需要事务管理

//可以实现增删改操作
update(String sql,Object...params)
update(Connection conn,String sql,Object...params)

//实现查询操作
query(String sql,ResultSetHandler rs,Object...params)
query(Connection conn,String sql,ResultSetHandler rs,Object...params)

ResultSetHandler是一个接口 该接口中有一个抽象方法handle()
作业:自定义实现类实现ResultSetHandler接口并重写其handle方法(方法体的实现参看下午demo1)

ArrayHandler        把每条表记录封装到一个Object数组中
ArrayListHandler    把每条表记录封装到一个Object数组中 再把所有数组放入list集合中

BeanHandler            把每条表记录的字段封装到指定类型的属性上
BeanListHandler        把每条表记录的字段封装到指定类型的属性上 并且把多个该类型的对象放入list集合中

MapHandler            把每条表记录的字段名和字段值放入到Map集合中
MapListHandler        把每条表记录的字段名和字段值放入到Map集合中 再把所有的Map集合封装到List集合中

//了解
columnListHandler    封装指定列的查询记录
scalarHandler        查询单值记录
keyedHandler        把查询到的每条记录放入Map集合中 再把该Map集合放入外层Map集合的value位置 key是指定列名称

​ ​