1.连接池概述

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

2.C3P0

public class Demo1 {@Testpublic 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 {@Testpublic 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<String,Object>,在将这个map集合做为另一个Map的value,另一个Map集合的key是指定的字段的值。
MapHandler 将结果集中第一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值

MapListHandler 将结果集中每一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值,在将这些Map封装到List集合中。
ScalarHandler 它是用于单数据。例如select count(*) from 表操作。

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<Object>*  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);
}

转载于:https://www.cnblogs.com/learnjfm/p/6916749.html

JDBC连接池与工具类相关推荐

  1. Druid 连接池 JDBCUtils 工具类的使用

    Druid工具介绍 它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser. 支持所有JDBC兼容的数据库,包括Oracle.MySQL. ...

  2. 连接池-DBCPUtils工具类(dbcp)

    一.合建properties文件 在src目录下创建一个名为"dbcpconfig.properties"的文件,里面的内容为: #连接设置 driverClassName=com ...

  3. 连接池-C3P0Utils工具类(c3p0)

    一.创建文件 在src目录下创建一个名为"c3p0-config.xml"的文件,里面的内容为: <?xml version="1.0" encoding ...

  4. DataSourceUtils(使用C3P0连接池的工具类)

    一.导入jar包(c3p0-0.9.1.2.jar) 2.添加配置文件(放在src下) 配置文件的名称:c3p0.properties 或者 c3p0-config.xml 放在src之下 c3p0. ...

  5. Java Redis 连接池 Jedis 工具类,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  6. JDBC连接池的简单实现

    实现一个简单的数据库连接池 前言: 最近在搞一个项目,就是要把SqlServer数据全部导入到Oracle中,也要让项目由原来的SqlServer支持Oracle,于是自已在网上找了很多工具,发现导的 ...

  7. JDBC、封装JDBC连接池、第三方连接池工具

    主要内容: JDBC简介 JDBC来源 通过代码实现JDBC JDBC的改进需求 JDBC改进的代码实现 JDBC使用的设计模式 封装连接池 封装JDBC连接池 ThreadLoacl的使用 Thre ...

  8. JDBC连接池和DBUtils

    本节内容: JDBC连接池 DBUtils 一.JDBC连接池 实际开发中"获得连接"或"释放资源"是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况 ...

  9. 数据层优化-jdbc连接池简述、druid简介

    终于回到既定轨道上了,这一篇讲讲数据库连接池的相关知识,线程池以后有机会再结合项目单独写篇文章(自己给自己挖坑,不知道什么时候能填上),从这一篇文章开始到本阶段结束的文章都会围绕数据库和dao层的优化 ...

最新文章

  1. ATL的GUI程序设计(3)
  2. 《Apache Common CLI官方文档
  3. hdu3182 状态压缩dp
  4. 『ACM-算法-离散化』信息竞赛进阶指南--离散化
  5. linux调试工具kdbg,Linux下图形化调试工具: kdbg, Affinic
  6. TortoiseGit 自动登录
  7. 单独的REST JSON API服务器和客户端? [关闭]
  8. R_Studio模拟学生成绩对数据简单分析
  9. ASP.NET中用healthMonitor属性用法
  10. C# RestSharp的http连接
  11. 译文:一个采用 Three.js 的 3D 动画场景制作:飞行者
  12. 谷歌大脑2017技术研究总结 | Jeff Dean执笔(附论文 数据集)
  13. 程序员编程艺术第四十一章 四十二章 荷兰国旗 矩阵相乘Strassen算法
  14. java 操作日志 log
  15. ubuntu禁用smap
  16. 用HTML做树形菜单,jquery实现树形菜单完整代码
  17. 【性能定位】使用jstack定位线程堆栈信息
  18. win10点击任务栏图标无法最小化应用
  19. vue-router路由有几种模式?说说它们的区别?
  20. 河南移动物联网建设加速 亿元级市场呼之欲出

热门文章

  1. 常用Linux运维命令
  2. IPsec ***基础:认识IPsec ***
  3. 用GIF展现程序员的生活二
  4. 看老外程序员如何向妻子解释OOD (转载)
  5. 如何在Ubuntu下面识别Galaxy Nexus设备
  6. 一次恢复outlook express通讯录文件*.wab的经历
  7. .NET环境下水晶报表使用总结
  8. Js中String对象
  9. java检查危险品程序_危险品检查java程序
  10. Java 编解码问题