●实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们采用连接池技术,来共享连接Connection。这样我们就不需要每次都创建连接、释放连接了,这些操作都交给了连接池。
●概念
用池来管理Connection,这样可以重复使用Connection。有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象。当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了。
●规范
Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。这样应用程序可以方便的切换不同厂商的连接池。就好比安卓的充电器接口,统一规范,统一使用。
常见的连接池:DBCP、C3P0。
●不用JDBC查询数据
将c3p0-config.xml粘贴到resources目录下——改掉jdbcUrl中的地址,把最后一项的表名换成你自己的表名——将DatasourceUtils导入JdbcUtil所在的包下——在pom.xml包下导入c3p0 jar包(一定要点击右下角的import changes),具体如下:
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
1:不用jdbcutil获取数据,代码如下:
public class dbQuery {
public static void main(String[] args) throws SQLException {
QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
String sql="select * from stu where age>?";
Object [] parms={30};
//List<Object[]> list = qr.query(connection, sql, new ArrayListHandler(), parms);
List<Student> list = qr.query(sql, new BeanListHandler<Student>(Student.class),parms);
System.out.println(list);
}
}
运行查找结果如下图所示:
[Student{id=1, name='王博聪', age=90, sex='女', tname='null'}, Student{id=2, name='王博聪', age=111, sex='男', tname='null'}, Student{id=4, name='ewdwe', age=66, sex='女', tname='null'}, Student{id=5, name='ewdw', age=77, sex='女', tname='null'}, Student{id=9, name='一湖光塔影', age=33, sex='男', tname='null'}, Student{id=12, name='王芝洋', age=100, sex='女', tname='null'}]
2:写一个连接池:
连接池是用来维护数据库的链接,可以拿取连接,同时还可以归还连接。
package com.pp.util;
import java.sql.Connection;
import java.util.LinkedList;
public class MyDataSouce {
static LinkedList<Connection> pool=new LinkedList<Connection>();//chi
static {
for (int i=0;i<3;i++){
Connection connection = JdbcUtil.getConnection();
pool.addLast(connection);
}
}
public static Connection getConnection(){
if (pool.isEmpty()){
for (int i=0;i<3;i++){
Connection connection = JdbcUtil.getConnection();
pool.add(connection);
}
}
System.out.println("connection sucess");
return pool.removeFirst();
}
public static void addback(Connection connection){
pool.add(connection);
System.out.println("back");
}
}