数据库连接池技术,在java程序中,有三个比较常用:c3p0、dbcp、druid。
建议:如果从代码性能角度出发,建议使用druid或者dbcp。
如果代码的简洁性角度出发,建议使用c3p0,但是其有个毛病,就是效率比较低。
1、导入连接池的包
2、将连接信息放置在druid.properties文件中
3、连接池对象在jdbc操作时,用数据源DataSource来表示,所以我们应当获取到druid数据库连接池对应的数据源对象!
创建Druid数据源时,需要指定一个属性文件对象,因为要为数据源中的数据库连接对象设置连接信息!所以先通过输入流读取到druid.properties配置文件中的连接信息,然后将读取到的信息加载到属性文件对象中,进而传递到创建数据源的方法中!那么此时得到的数据源对象中的连接对象就具备了连接信息!
DbUtils+Druid完成数据库操作的示例代码:
public static void updateDemo() throws SQLException {
/*
使用数据库连接池,只是改变了连接对象的获取方式,提升了程序的性能!与DbUtils的操作代码是无关的!
现在无需再手动获取、创建连接对象了,因为我们现在已经拿到了Druid的数据源,我们就可以从数据源中获取到连接池
管理的连接对象了!
这是使用DbUtils+Druid的第一种形式,手动从数据源中获取连接对象使用!
*/
//获取数据源
DataSource dataSource = DruidUtils.getDataSource();
//从数据源中获取连接对象
Connection connection = dataSource.getConnection();
//创建QueryRunner对象
QueryRunner qRunner = new QueryRunner();
//执行sql语句
int row = qRunner.update(connection, "update student set phone = ? where sid = ?",
"155", 3);
//处理结果
System.out.println(row > 0 ? "修改成功" : "修改失败");
//释放资源
/*
如果此时的连接对象是从数据源中获取到的,在执行释放资源的方法时,不是将其销毁,而是归还池子
*/
DbUtils.close(connection);
}
public static void selectDemo() throws SQLException {
/*
使用DbUtils+Druid的第二种形式,我们无需手动从数据源中获取连接对象
只需要在QueryRunner对象创建时,传递数据源作为参数,即可自动去数据源中获取连接!
而且此时在操作完数据库之后,也不需要释放资源,因为会自动将获取到的连接归还池子!
*/
//创建QueryRunner对象,指定数据源
QueryRunner qRunner = new QueryRunner(DruidUtils.getDataSource());
//执行sql语句,此时因为连接对象是自动获取的,所以方法的参数中不需要再传递连接对象Connection
List<Student> stus =
qRunner.query("select * from student", new BeanListHandler<Student>(Student.class));
for (Student student : stus) {
System.out.println(student);
}
}