实际开发中呢,每次获取Connection和释放掉都是消耗系统资料的两个过程。所以我们采用连接池技术,来“共享”这些Connection。
用pool来管理Connection这样我们便可以重复使用这些Connection。并且使用时直接获取,用完后,调用改写的(@Override)close方法也不会真正的关闭Connection,而是把这些Connection放回pool中,实现pool中对象的反复利用。private static LinkedList pool = new LinkedList();一般我们使用集合来存储Connection对象
Java为数据库连接池提供了interface :javax.sql.DataSource,实现这个接口才能使用连接池 **public class MyDataSource implements DataSource {}**一般常用的连接池有DBCP,C3P0
获取Connection对象,开启和关闭事务,所以这个工具类用到连接mysql的驱动jar包,涉及c3p0连接池,所以还需要导入c3p0的jar包,以及c3p0-config.xml配置文件
先写一个静态的代码块来加载配置文件的信息,然后书写获取连接和释放资源的方法
C3P0提供一个核心的工具类 叫做ComboPooledDataSource,使用连接池的话必须创建其对象。
new ComboPooledDataSource(里面是config的name),不填则是默认配置,及
DBCP也是一个连接池,Tomcat内置的连接池
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/“Database name”?useUnicode=true&characterEncoding=utf8
username=root
password=root
同理工具类代码如下:
先通过类加载器加载出一个properties文件的输入流 InputStream
然后通过Properties对象来加载(运行)这个输入流 props.load(is)
最好创建出一个新的数据源存储Connection。
dataSource = BasicDataSourceFactory.createDataSource(props);
(1)获取数据源(pool)的方法 getDataSource()
(2)获取Connection的方法 getConnection()
案例:使用C3P0或DBCP连接池 添加数据
使用C3P0Utils先获取连接 getConnection 然后更新操作。
同理DBCPUtils.getConnection();获取连接,然后操作。
使用JDBC你会发现 代码太过多余,每次操作多会有很多相同的操作。
而DBUtils则是JDBC简化的开发工具包,其中需要使用的技术有:连接池(获得连接),SQL语句也不能少。
它封装了对JDBC的操作并且简化了其操作,可以少写代码。
一个概念--------JavaBean组件
JavaBean是一个类,用来封装数据,提供有getter setter方法。
DButils 三个核心功能介绍
QueryRunner 中提供了对sql语句操作的API
ResultSetHandler接口 ,用于定义select(查询)操作后,怎么封装结果集
DbUtils类,工具类,定义了处理方法。
(1)QueryRunner 核心类:
提供了数据源 QueryRunner (DataSource ds),及连接池,DBUtils底层自动维护和连接Connection
update(String sql,Object …params),执行更新的数据。
params是为占位符所设置值的集合
例如Object[] params = { “username”, “password” };
query(String sql,ResultSetHandlerrsh,Object…params),执行查询操作
例如List users = qr.query(sql, new BeanListHandler(User.class));
而BeanListHandler是上面ResultSetHandler的结果集处理类,作用是将每一条(因为是查询操作)记录封装到指定的javabean里面,将这些javabean再封装到List集合里。
BeanHandler只是将第一条记录装到指定javabean里面(前面加List则循环往复)。
(2)DBUtils工具类
closeQuirty(Connection conn)关闭连接
commitAndCloseQuiety(Connection conn)提交并关闭连接
rollbackAndCloseQuiety(Connection conn)回滚并关闭