JDBC连接池与工具类的使用

JDBC连接池与工具类总结

1.连接池概述

用池来管理Connection,这样可以重复使用Connection,有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象,当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,
而是把Connection归还给池,池就可以再利用这个Connection对象了

2.C3P0

public class Demo1 {
@Test
public void test() throws Exception {
//获得连接池
ComboPooledDataSource dataSource = new ComboPooledDataSource();
//设置连接池与数据库的基本项
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql:///demo");
dataSource.setUser("root");
dataSource.setPassword("root");

//初始化连接数目
dataSource.setInitialPoolSize(10);
//最小连接个数
dataSource.setMinPoolSize(2);
//最大连接个数
dataSource.setMaxPoolSize(20);

//获得连接
Connection connection = dataSource.getConnection();
System.out.println(connection);
}
}

3.常见的配置项

属性 描述
user 用户名
password 密码
driverClass 驱动(mysql驱动:com.mysql.jdbc.Driver)
jdbcUrl jdbc:mysql:///数据库
acquireIncrement:连接池无空闲连接可用时,一次性创建的新连接数 默认3
initialPoolSize :连接池初始化时创建的连接数 默认3
maxPoolSize :连接池中拥有的最大的连接数
minPoolSize :连接池保持的最小的连接数

4.c3p0配置文件使用

配置文件名字:c3p0-config.xml
配置文件位置:src
配置文件内容:命名配置

<c3p0-config>

<!-- 命名的配置 -->
<named-config name="itheima">
<!-- 连接数据库的4项基本参数 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///demo</property>
<property name="user">root</property>
<property name="password">root</property>
<!-- 如果池中数据连接不够时一次增长多少个 -->
<property name="acquireIncrement">5</property>
<!-- 初始化连接数 -->
<property name="initialPoolSize">20</property>
<!-- 最小连接受 -->
<property name="minPoolSize">10</property>
<!-- 最大连接数 -->
<property name="maxPoolSize">40</property>
<!-- -JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量 -->
<property name="maxStatements">0</property>
<!-- 连接池内单个连接所拥有的最大缓存statements数 -->
<property name="maxStatementsPerConnection">5</property>
</named-config>
</c3p0-config>

5.c3p0工具类

public class Demo2 {
//连接池
private static ComboPooledDataSource dataSource = new ComboPooledDataSource("datebase");
//获得数据源
public static DataSource getDataSource() {
return dataSource;
}

//获得连接
public static Connection getConnection () throws SQLException {
return dataSource.getConnection();
}
}

6.dbcp连接池

常见属性配置项
属性 描述

username 用户名
password 密码
driverClassName 驱动(mysql驱动:com.mysql.jdbc.Driver)
url jdbc:mysql:///数据库
maxActive :连接池中拥有的最大的连接数
minldle :最小空闲连接
maxldle :最大空闲连接
initialSize :初始化连接

public class Demo3 {
@Test
public void test() throws SQLException {
//获得连接池
BasicDataSource dataSource = new BasicDataSource();
//设置基本项
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///demo");
dataSource.setUsername("root");
dataSource.setPassword("root");
// * 初始化连接池中连个的个数
dataSource.setInitialSize(5);
// * 最大活动数
dataSource.setMaxActive(10);
//2获得连接
Connection conn = dataSource.getConnection();

}
}

7.dbcp连接池配置文件使用

  配置文件名称:*.properties
  配置文件位置:建议src

连接设置

driverClassName=com.mysql.jdbc.Driver.
url=jdbc:mysql://localhost:3306/webdb_4
username=root
password=root

initialSize=10

maxActive=50

maxIdle=20

minIdle=5

8.dbcp工具类

public class Demo4 {
//创建连接池
private static DataSource dataSource;
//加载配置文件,创建连接池
static{
try {
InputStream is = Demo4.class.getClassLoader().getResourceAsStream("dbcp.properties");
Properties pro = new Properties();
pro.load(is);
dataSource = BasicDataSourceFactory.createDataSource(pro);
}  catch (Exception e) {
e.printStackTrace();
}
}
//获得连接池
public static DataSource getDataSource() {
return dataSource;
}

//获得数据库

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

9.DBUtils工具类

它是java编程中的数据库操作实用工具
封装了JDBC的操作,简化了JDBC
三个核心功能:
QueryRunner中提供对sql语句操作的API
ResultHandler接口,用于定义select操作后,怎样封装结果集
DbUtils类,定义了关闭资源与实务处理的方法
QueryRunner核心类介绍

QueryRunner(DataSource)创建核心类,并提供数据源,内部自己维护connection
update(String sql,Object…params)执行DML语句
query(String sql,ResultSetHandler,Object..params)执行DQL语句,并将查询结果封装到对象中

10.QueryRunner结果处理类

ArrayHandler 将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值
ArrayListHandler 将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。
BeanHandler 将结果集中第一条记录封装到一个指定的javaBean中。
BeanListHandler 将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
ColumnListHandler 将结果集中指定的列的字段值,封装到一个List集合中
KeyedHandler 将结果集中每一条记录封装到Map

11.JavaBean

  1. 需要实现接口:java.io.Serializable ,通常实现接口这步骤省略了,不会影响程序。
  2. 提供私有字段:private 类型 字段名;
  3. 提供getter/setter方法:
  4. 提供无参构造

特别补充:

ScalarHandler

* 查询数据表结果集处理其中一种方式:
 *ScalarHandler处理方式
 * 处理单值查询结果,执行的select语句后,结果集只有1个

@Test 
public void demo01() throws SQLException{
// ScalarHandler : 用于处理聚合函数执行结果(一行一列)
// * 查询总记录数
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
String sql = "select count(*) from product";

Long obj = queryRunner.query(sql, new ScalarHandler<Long>());

//System.out.println(obj.getClass());
System.out.println(obj);

}



 MapHandler 


 * 查询数据表结果集处理其中一种方式:
 *   MapHandler处理方式
 * 将数据表结果集的第一行数据,封装成Map集合
 *   键: 数据表中的列
 *   值: 这个列中的数据
 *   
 *   处理方式的Map集合,是LinkedHashMap的子类

@Test 
public void demo02() throws SQLException{
// MapHandler : 将查询到的一条记录,封装到Map中,map.key=字段名,map.value=值
// * 主要用途:多表操作、将数据转换json 等
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
String sql = "select * from product where id = ?";
Object[] params = {6};
Map<String,Object> map = queryRunner.query(sql, new MapHandler(), params);

System.out.println(map);
// 将Map数据封装到指定JavaBean
}

MapListHandler

 * 查询数据表结果集其中一种处理方式:
 *   MapListHandler处理方式
 * 将数据表的结果集的每一行封装成Map集合
 * 数据表多行数据,出现多个Map集合,存储List集合

@Test 
public void demo03() throws SQLException{
// MapListHandler : 查询所有数据,将每一条记录封装到Map中,然后将Map添加到List中,最后返回List
// * 主要用途:多表操作 等
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
String sql = "select * from product";
List<Map<String,Object>> list = queryRunner.query(sql, new MapListHandler());
   for(Map<String,Object> map : list){
System.out.println(map);
}
}

KeyHandler

@Test 
public void demo04() throws SQLException{
// KeyedHandler : new KeyedHandler("字段名称"),查询所有,将查询结果封装到Map中
// * map.key=为指定“字段名称”对应的值
// * map.value=为当前整条记录所有的值,数据为Map<字段名,值>
// 类型  Map<String , Map<String,Object> >
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
String sql = "select * from product";
Map<String,Map<String,Object>> map = queryRunner.query(sql, new KeyedHandler<String>("name"));
 for(Map.Entry<String, Map<String,Object>> entry : map.entrySet()){
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
    }

ColumnListHandler

/*
* 查询数据表结果集处理其中一种方式:
* ColumnListHandler处理方式
* 将查询数据表结果集中的某一列数据,存储到List集合
* 哪个列不清楚,数据类型也不清楚, List
* ColumnListHandler构造方法
* 空参数: 获取就是数据表的第一列
* int参数: 传递列的顺序编号
* String参数: 传递列名
*
* 创建对象,可以加入泛型,但是加入的数据类型,要和查询的列类型一致

 */
@Test 
public void demo05() throws SQLException{
// ColumnListHandler : 查询指定一列数据
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
String sql = "select * from product";
List<String> list = queryRunner.query(sql, new ColumnListHandler<String>("name"));

System.out.println(list);
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值