当前位置:Gxlcms > 数据库问题 > 数据库连接池

数据库连接池

时间:2021-07-01 10:21:17 帮助过:5人阅读

c3p0和Druid使用
2. DBUtils使用
3. SpringJDBC轻量级框架
4. 总结

c3p0和Druid使用

1. *概念:其实是一个容器(集合),存放数据库的容器。用户访问完在放回池子中
2. *好处:
1.节约资源
2. 用户访问高效

3. 实现:
1. 标准接口:DataSource javax.sql包下的
1.方法:
*获取连接 Connection()
*归还连接:Connection.close()如果连接对象connection是连接池获取的,此时应该是归还连接,不是直接关闭连接。
2.
* c3p0连接池技术
* Druid连接技术,由阿里巴巴实现的。
4. C3P0的使用:
*步骤:
1. 导入jar(两个),c3p0的包,和mchange-commons-java-0.2.12 jar包,+数据库连接的包
2. 定义配置文件:
*名称:c3p0.properties 或者 c3p0-config.xml
*路径:直接放在src目录下即可
3. 创建核心对象 获取数据库连接池对象 :combopooledDataSource(mchange-commons-java-0.2.12 jar包)
4. 获取连接:getConnection
*核心代码:
//获取dataSource,使用的默认配置
1.DataSource ds=new ComboPooledDataSource();//自动获取配置文件c3p0-config.xml
//使用其他配置,带参的使用
2.DataSource ds=new ComboPooledDataSource("otherc3p0");
3. 通过DataSource调用getConnection方法
4. 剩下的操作和原来一样

* 注意:C3p0只是一个管理连接池的一个容器,其他操作还和原来一样,先获取sql执行对象,在执行sql,最后处理结果。

5. Druid连接池
* 步骤
1.导入 druid-1.0.9jar包和数据库连接jar包
2. 定义配置文件:druid.properties
*可以叫任意名称,放在任意目录下
3. 获取数据库连接池对象 :DruidDataSourceFactory.createDataSource(pro);
4. 获取连接:getConnection
* 创建Utils工具使用:
1. 创建成员变量DataSource
2. 用静态代码块获取DataSource对象,
3. 创建getConnection方法
4.创建释放资源的方法
例如:
public class DruidUtils {
private static DataSource ds;
//获取连接池对象
static {
Properties pro=new Properties();
//获取配置文件,并返回流
InputStream is = DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties");
try {
pro.load(is);
ds= DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
//获取连接对象
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
//释放资源
public static void close(Connection con,Statement statement){
close(con,statement,null);
}
public static void close(Connection con, Statement statement, ResultSet rs){
if (rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (con!=null){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (statement!=null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//获取连接池的方法
public static DataSource getDatasource(){
return ds;
}
}

DBUtils使用

* DBUtils框架 它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量
* 步骤:
1. 导包:commons-dbutils-jar
2. 创建QueryRunner对象,依赖数据源DataSource
*QueryRunner runner=new QueryRunner(DruidUtils.getDatasource());
3. 调用QueryRunner的方法来完成数据库操
1. update:用来执行一个更新(插入、更新或删除)操作。
2. batch:用来执行批量更新(插入、更新或删除)操作。
3. query(sql,new ArrayHandler()):把结果集中的第一行数据转成对象数组。
4. query(sql,new ArrayListHandler()):把结果集中的每一行数据都转成一个数组,再存放到List中。
5. query(sql,new BeanHandler()):将结果集中的第一行数据封装到一个对应的JavaBean实例中。
6. query(sql,new BeanListHandler()):将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
7. query(sql,new ColumnListHandler("name")):将结果集中某一列的数据存放到List中
8. query(sql,new KeyedHandler("name")):将结果集中的每一行数据都封装到一个Map<列名,列值>里,再把这些map再存到一个map里,其key为指定的key。
9. query(sql,new MapHandler()):将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
10. query(sql,new MapListHandler()):将结果集中的每一行数据都封装到一个Map里,然后再存放到List.
11. query(sql,new ScalarHandler()):将单个值封装,用来统计聚合函数返回值.如count,avg,max,min

*代码:
package com.rqy.datasource.dbutils;

import com.rqy.datasource.Utils.DruidUtils;
import com.rqy.datasource.bean.Account;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.*;
import org.junit.Test;
import java.sql.SQLException;
import java.util.*;

/**
* @author 任清阳
* @Email 1277409109@qq.com
* @date 2019/6/18 21:16
*/

public class DButilsDemo2 {
//1.导入jar包
private QueryRunner runner=new QueryRunner(DruidUtils.getDatasource());
//使用单元测试

/**
* batch:用来执行批量更新(插入、更新或删除)操作。
*/

@Test
public void testBatch() throws SQLException {
String sql="delete from account where name=? and balance=? ";
Object[] [] params=new Object[10][];
for (int i = 0; i < 10; i++) {
//为每一行给两列值,第一列对应第一个问号,第二列对应第二个问号
params[i]=new Object[]{i+"",3};
}
int[] query = runner.batch(sql,params);
System.out.println(Arrays.toString(query));

}
/**
* update:用来执行一个更新(插入、更新或删除)操作。
*/

@Test
public void test() throws SQLException {
String sql="insert into account values(null,?,?) ";
int query = runner.update(sql,"ren",5200);
System.out.println(query);

}

/**
*query: ArrayHandler:把结果集中的第一行数据转成对象数组。
*/

@Test
public void test1() throws SQLException {
String sql="select * from account ";
Object[] query = runner.query(sql, new ArrayHandler());
System.out.println(Arrays.toString(query));

}
/**
* query:ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。
*/

@Test
public void test2() throws SQLException {
String sql="select * from account ";
List<Object[]> query = runner.query(sql, new ArrayListHandler());
for (Object[] objects:query) {
System.out.println(Arrays.toString(objects));
}
}
/**
* BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
*/

@Test
public void test3() throws SQLException {
String sql="select * from account ";
Account query = runner.query(sql, new BeanHandler<Account>(Account.class));
System.out.println(query);
}
/**
* BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
*/

@Test
public void test4() throws SQLException {
String sql="select * from account ";
List<Account> query = runner.query(sql, new BeanListHandler<Account>(Account.class));
for(Account account:query) {
System.out.println(account);
}
}
/**
* ColumnListHandler:将结果集中某一列的数据存放到List中
*/

@Test
public void test5() throws SQLException {
String sql="select * from account ";
List<Object> query = runner.query(sql, new ColumnListHandler("name"));

人气教程排行