百度 谷歌  http://commons.apache.org/   可以找到DBCP   ,  这里选择使用C3P0,百度一下。https://www.mchange.com/projects/c3p0/

在maven 库,找到C3p0添加到MAVEN的版本文件。

数据库连接池的运行机制

(1) 程序初始化时创建连接池
(2) 使用时向连接池申请可用连接
(3) 使用完毕,将连接返还给连接池
(4) 程序退出时,断开所有连接,并释放资源

选择使用最多的版本,复制添加到Maven依赖关系如下:

到maven项目中添加

接下来使用,连接一个数据库测试

public class DbUtil {
private static Connection conn = null; // 声明Connection对象,Connection接口用于建立与特定数据库的连接,私有private只能在本类调用
private PreparedStatement pstmt;
private ResultSet rs;
// 使用单例模式式创建数据库连接池
private static ComboPooledDataSource dataSource; // 连接数据库的构造方法, 1加载驱动, 2建立连接, 3使用sql语句进行数据库操作, 4释放资源。
// (1)构造方法的名字必须与定义他的类名完全相同,没有返回类型,甚至连void也没有;//
// (2)构造方法的调用是在创建一个对象时使用new操作进行的。构造方法的作用是初始化对象。
// (3)每个类可以有零个或多个构造方法;(4)不能被static、final、synchronized、abstract和native修饰。构造方法不能被子类继承。
// (5)构造方法在创建对象时自动执行,一般不能显式地直接调用。
public static ComboPooledDataSource getDateSource() {
if (dataSource == null) {
try {
dataSource = new ComboPooledDataSource();
// try { 执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容 }
// 获取连接对象,地址,用户名,密码
dataSource.setUser("root"); // 用户名
dataSource.setPassword(""); // 密码
dataSource.setDriverClass("com.mysql.jdbc.Driver"); // mysql数据库驱动程序,这里可以换成你要的其他数据库驱动程
String url = "jdbc:mysql://localhost:3306/dev?characterEncoding=UTF-8";
dataSource.setJdbcUrl(url);// 数据库地址
dataSource.setInitialPoolSize(5); // 初始化连接数
dataSource.setMinPoolSize(1);// 最小连接数
dataSource.setMaxPoolSize(10);// 最大连接数
dataSource.setMaxStatements(50);// 最长等待时间
dataSource.setMaxIdleTime(60);// 最大空闲时间,单位毫秒 System.out.println(dataSource);
// System.out.println("连接mysql数据库成功");// 控制台输出 // catch { 除非try里面执行代码发生了异常,否则这里的代码不会执行 }
} catch (Exception e) {
// 这将捕获任何发生的异常。另外,还提供e参数,可以在处理异常时使用e参数来获得有关异常的信息。
e.printStackTrace();
}
} return dataSource; } public static Connection getConnection() {
if (conn == null) {
try {
conn = getDateSource().getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} return conn;
} /**
* 主要针对增,删,改的通用方法
*
* @param sql
* 要执行的SQL语句(insert, delete, updata)
* @param paramsValue
* 参数数组,用来处理SQL语句中的占位符参数,如果没有参数,请传入null
*/
public void update(String sql, String[] str) {
try {
// 2. 获取PreparedStatement
pstmt =getConnection().prepareStatement(sql);
// 3. 得到参数元数据个数
int count = pstmt.getParameterMetaData().getParameterCount();
// 4. 利用参数元数据给SQL语句的占位符需要的参数赋值
if (str != null && str.length > 0) {
for (int i = 0; i < count; i++) {
// 循环结束,就是可以给SQL语句完整赋值
pstmt.setObject(i + 1, str[i]);
}
}
// 5. 执行
pstmt.executeUpdate();
} catch (SQLException e) {
throw new RuntimeException(e);
} finally { closeAll();
}
} /**
* 查询语句
*
* @param sql
* SQL语句
* @param params
* SQL语句
* @return ResultSet结果集
*/
public ResultSet executeQueryRS(String sql, Object[] params) {
try {
pstmt =getConnection().prepareStatement(sql);
for (int i = 0; i < params.length; i++) {
pstmt.setObject(i + 1, params[i]);
}
rs = pstmt.executeQuery();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
return rs;
} /**
* 获取结果集,并将结果放在List中
*
* @param sql
* SQL语句
* @return List结果集
*/
public List<Object> excuteQuery(String sql, Object[] params) {
ResultSet rs = executeQueryRS(sql, params);
ResultSetMetaData rsmd = null;
int columnCount = 0;
try {
rsmd = rs.getMetaData();
columnCount = rsmd.getColumnCount();
} catch (SQLException e1) {
System.out.println(e1.getMessage());
} List<Object> list = new ArrayList<Object>(); try {
while (rs.next()) {
Map<String, Object> map = new HashMap<String, Object>();
for (int i = 1; i <= columnCount; i++) {
map.put(rsmd.getColumnLabel(i), rs.getObject(i));
}
list.add(map);
}
} catch (SQLException e) {
System.out.println(e.getMessage());
} finally {
closeAll();
} return list;
} private void closeAll() {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
} }

使用C3p0,连接数据库成功。并查询数据成功。

数据库连接池技术,c3p0的更多相关文章

  1. .数据库连接池技术:DBCP和C3P0

    数据库连接池技术:DBCP和C3P0 1.什么是数据库连接池 已知的方法是需要访问数据库的时候进行一次数据库的连接,对数据库操作完之后再释放这个连接,通常这样业务是缺点很明显的: 用户每次请求都需要向 ...

  2. JDBC学习笔记(8)——数据库连接池(dbcp&amp;C3P0)

    JDBC数据库连接池的必要性 一.在使用开发基于数据库的web程序时,传统的模式基本是按一下步骤: 1)在主程序(如servlet/beans)中建立数据库连接 2)进行sql操作 3)断开数据库连接 ...

  3. 【转】JDBC学习笔记(8)——数据库连接池(dbcp&amp;C3P0)

    转自:http://www.cnblogs.com/ysw-go/ JDBC数据库连接池的必要性 一.在使用开发基于数据库的web程序时,传统的模式基本是按一下步骤: 1)在主程序(如servlet/ ...

  4. 数据库连接池(c3p0)

    (一)问题的提出: 在使用开发基于数据库的web程序时,传统的数据库使用模式按照以下步骤: 在程序中建立数据库连接 进行sql操作 断开数据库连接 但是,这种模式存在着移动的问题: 传统连接模式每次向 ...

  5. java攻城狮之路--复习JDBC(数据库连接池 : C3P0、DBCP)

    复习数据库连接池 : C3P0.DBCP 1.数据库连接池技术的优点: •资源重用:      由于数据库连接得以重用,避免了频繁创建,释放连接引起的大量性能开销.在减少系统消耗的基础上,另一方面也增 ...

  6. Java学习:数据库连接池技术

    本节内容 数据库连接池 Spring JDBC : JDBC Template 数据库连接池 1.概念:其实就是一个容器(集合),存放数据库连接的容器 当系统初始化好后,容器中会申请一些连接对象,当用 ...

  7. java数据库连接池技术原理(浅析)

    在执行数据库SQL语句时,我们先要进行数据连接:而每次创建新的数据库的连接要消耗大量的资源,这样,大家就想出了数据库连接池技术.它的原理是,在运行过程中,同时打开着一定数量的数据库连接,形成数据连接池 ...

  8. 【Java】数据库连接池技术

    JDBC的问题 在程序中,我们经常要建立与数据库的连接,之后再关闭这个连接.我们知道,数据库连接对象的创建是比较消耗系统性能的,这些频繁的操作势必会消耗大量的系统资源.因此我们需要采用更高效的数据库访 ...

  9. 主流Java数据库连接池分析(C3P0,DBCP,TomcatPool,BoneCP,Druid)

    主流数据库连接池 常用的主流开源数据库连接池有C3P0.DBCP.Tomcat Jdbc Pool.BoneCP.Druid等 C3p0: 开源的JDBC连接池,实现了数据源和JNDI绑定,支持JDB ...

  10. 基于JDBC的数据库连接池技术研究与应用

    引言 近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机 应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架构的3层开 ...

随机推荐

  1. springmvc学习第一天

    一.helloworld的实现 1.加入jar包(加入无关的jar包可能会引起服务器的冲突) commons-logging-1.2.jarjstl.jarspring-aop-4.1.6.RELEA ...

  2. ruby -- 问题解决(二)rails4.0create引起的ActiveModel::ForbiddenAttributesError错误

    之前将rails升级到4.0版本,发生了ActiveModel::ForbiddenAttributesError错误 于是上网溜达了一会,找到解决方案, ActiveModel::Forbidden ...

  3. UITableView的性能优化

    UITableView作为ios中使用最频繁的控件之一,其性能优化也是常常要面对的,尤其是当数据量偏大并且设备性能不足时.本文旨在总结tableview的几个性能优化tips,并且随着认识的深入,本文 ...

  4. 使用everything把一个文件夹里(包含子目录)的所有图片拷贝到另一个文件夹

    最近在找数据集,想要预览数据集里面的全部图片,而因为一些数据集的数据存储方式使得图片都分布在若干层后的子文件里,所以就需要一个如题所示的功能. 找了一堆XCOPY命令的使用方法,差点要撸起袖子写代码干 ...

  5. 基于ROS_Arduino室内移动机器人SLAM实验测试

    纯手工搭建的机器人,因此外观并不美. 基于ROS(indigo)以及Arduino等搭建软硬件平台,包括语音.视觉.激光.码盘等传感器设备. 整体如下图所示: 底盘特写: 语音输入: Arduino模 ...

  6. zabbix3.0.4 探索主机Discovery自动发现agent主机和zabbix-agent自动注册详细图文教程

    Zabbix 自动发现(Discovery)功能使用 随着监控主机不断增多,有的时候需要添加一批机器,特别是刚用zabbix的运维人员需要将公司的所有服务器添加到zabbix,如果使用传统办法去单个添 ...

  7. css 蒙层

    蒙层 利用z-index: .mui-backdrop-other { position: fixed; top: 44px; right:; bottom:; left:; z-index:; ba ...

  8. Ubuntu18.04中安装cuda的记录

    一.参考: https://blog.csdn.net/QLULIBIN/article/details/78714596 https://www.jianshu.com/p/00c37b09f0f3 ...

  9. 【读书笔记】iOS-button只显示在一个界面的右下角,不管界面大小怎么变化(xib,没有使用自动布局)(一)

    一,新建立一个工程,Hello,如图所示. 二,Xcode--->New--->File--->FirstViewController---->选中Also create XI ...

  10. 【Android内存泄漏检测】LeakCanary使用总结

    一.什么是LeakCanary? LeakCanary就是用来检测Android端内存泄漏的一个工具.能够检测Activity的泄漏 什么是内存泄漏? Java 对象有时也会”长死不死“,GC 拿它没 ...