JDBC连接池

DBCP:Apache推出的Database Connection Pool

使用步骤:

> 添加jar包  commons-dbcp-1.4.jar  commons-pool-1.5.6.jar

l  创建DBCP连接池工具类

n  规范接口:javax.sql.DataSource接口

n  实现类:BasicDataSource, 重写接口中的方法getConnection()

使用读取配置文件的方式(加案例)

DBCP中有一个工厂类BasicDataSourceFactory

工厂类中有一个静态方法

static DataSource createDataSource(Properties prop)

此方法返回的就是DataSource接口的实现类对象BasicDataSource

创建Propertis集合+IO技术读取配置文件

把配置文件传入BasicDataSourceFactory静态方法createDataSource中

public class DBCPUtilsReadConfig {

private static DataSource dataSourse;

static{

try {

InputStream is = DBCPUtilsReadConfig.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");

//创建Propertis集合

Properties pro=new Properties();

pro.load(is);

//把配置文件传入BasicDataSourceFactory静态方法createDataSource中

dataSourse = BasicDataSourceFactory.createDataSource(pro);

} catch (Exception e) {

throw new RuntimeException("读取配置文件失败");

}

}

//创建获取数据库连接对象的方法

public static Connection getConnection(){

try {

return dataSourse.getConnection();

} catch (SQLException e) {

throw new RuntimeException(e+"连接数据库失败");

}

}

public static void  close(ResultSet rs,Statement stat,Connection conn){

if(rs!=null){

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

if(stat !=null){

try {

stat.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

if(conn != null){

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

C3P0连接池

C3P0开源免费的连接池!目前使用它的开源项目有:Spring、Hibernate等。使用第三方工具需要导入jar包,c3p0使用时还需要添加配置文件 c3p0-config.xml

创建C3P0连接池的工具类

连接的规范接口:javax.sql.DataSource接口

接口的实现类对象ComboPooledDataSource

成员位置创建ComboPooledDataSource对象

C3P0内部会自动扫描并解析xml文件,给ComboPooledDataSource设置数据量的4大连接信息

创建一个静态方法返回Connection对象

创建一个静态方法释放资源

publicclass C3P0UtilsReadXML {

privatestatic ComboPooledDataSource dataSource = new ComboPooledDataSource();

//使用静态代码块给ComboPooledDataSource设置4大数据量连接信息

/*static{

try {

dataSource.setDriverClass("com.mysql.jdbc.Driver");

dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mybase4");

dataSource.setUser("root");

dataSource.setPassword("root");

} catch (Exception e) {

throw new RuntimeException("设置连接信息失败!");

}

}*/

// 创建一个返回ComboPooledDataSource的方法

publicstatic DataSource getDataSource(){

returndataSource;

}

// 创建一个静态方法返回Connection对象

publicstatic Connection getConnection() {

try {

returndataSource.getConnection();

} catch (SQLException e) {

thrownew RuntimeException(e + "获取数据库连接失败");

}

}

// 定义一个释放资源的方法

publicstaticvoid close(ResultSet rs, Statement stat, Connection conn) {

if (rs != null) {

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

if (stat != null) {

try {

stat.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

if (conn != null) {

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

使用DBUtils工具类对数据库表进行增删改查

DBUtils工具类作用:简化JDBC的开发(6步)

DBUtils有3个核心类

1.QueryRunner:使用QueryRunner中的方法对数据库进行增删改查

2.DbUtils:提供了大量的释放资源的方法

3.ResultSetHandler接口:提供了处理查询结果集的方法

QueryRunner类

构造方法:

QueryRunner() 空参数构造方法

调用更新和查询方法的时候,需要传入Connection对象

QueryRunner(DataSource ds) 带DataSource数据库连接池的构造方法

调用更新和查询方法的时候QueryRunner会自动从DataSource实现类对象中获取数据库连接对象,使用完毕会自动归还

成员方法:

执行执行增删改的成员方法

int update(Connection conn, String sql, Object... params)用来执行增删改的SQL

int update(String sql, Object... params) 用来执行增删改的SQL

参数:

Connection conn:数据库连接对象

String sql:拼接的sql语句,可以使用?占位符

Object... params:?占位符的实际参数,可以使用Object[]

返回值:

int:执行的有效行数

执行执行查询的成员方法

<T> T query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)

<T> T query(String sql, ResultSetHandler<T> rsh, Object... params)

参数:

Connection conn:数据库连接对象

String sql:拼接的sql语句,可以使用?占位符

Object... params:?占位符的实际参数,可以使用Object[]

ResultSetHandler<T> rsh:用来存储查询之后的结果集,可以传入ResultSetHandler9种实现类对象

返回值:

<T> T:传入的ResultSetHandler实现类不同,返回的结果集也不同,使用泛型,传入什么结果集,就返回对应的类型

JDBC连接池&DBUtils的更多相关文章

  1. Junit 注解 类加载器 .动态代理 jdbc 连接池 DButils 事务 Arraylist Linklist hashset 异常 哈希表的数据结构,存储过程 Map Object String Stringbufere File类 文件过滤器_原理分析 flush方法和close方法 序列号冲突问题

    Junit 注解 3).其它注意事项: 1).@Test运行的方法,不能有形参: 2).@Test运行的方法,不能有返回值: 3).@Test运行的方法,不能是静态方法: 4).在一个类中,可以同时定 ...

  2. 【JDBC&Dbutils】JDBC&JDBC连接池&DBUtils使用方法(重要)

    -----------------------JDBC---------- 0.      db.properties文件 driver=com.mysql.jdbc.Driver url=jdbc: ...

  3. JDBC连接池&DBUtils使用

    使用连接池改造JDBC的工具类: 1.1.1          需求: 传统JDBC的操作,对连接的对象销毁不是特别好.每次创建和销毁连接都是需要花费时间.可以使用连接池优化的程序. * 在程序开始的 ...

  4. JDBC连接池和DBUtils

    本节内容: JDBC连接池 DBUtils 一.JDBC连接池 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们采取连接池技术,来共享连接Conne ...

  5. 【JAVAWEB学习笔记】10_JDBC连接池&DBUtils

    使用连接池改造JDBC的工具类: 1.1.1          需求: 传统JDBC的操作,对连接的对象销毁不是特别好.每次创建和销毁连接都是需要花费时间.可以使用连接池优化的程序. * 在程序开始的 ...

  6. jdbc连接池&改进dbUtil成C3P0Util

    一.jdbc连接池 1.连接池的存在理由   前面介绍的dbUtils工具类虽然实现了一个对jdbc的简单封装.但它依旧采取从驱动管理获取连接 (DriverManager.getConnection ...

  7. 四大流行的jdbc连接池之C3P0篇

    C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSourc ...

  8. Spring+SpringMVC+MyBatis+easyUI整合优化篇(九)数据层优化-jdbc连接池简述、druid简介

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

  9. JDBC连接池-C池3P0连接

    JDBC连接池-C3P0连接 c3p0连接池的学习英语好的看英文原版      c3p0 - JDBC3 Connection and Statement Pooling 使用c3p0连接池  三种方 ...

随机推荐

  1. Hadoop伪分布安装详解(四)

    目录: 1.修改主机名和用户名 2.配置静态IP地址 3.配置SSH无密码连接 4.安装JDK1.7 5.配置Hadoop 6.安装Mysql 7.安装Hive 8.安装Hbase 9.安装Sqoop ...

  2. 通过js获取UserAgent写入数据库 js传值至php

    借助cookie,cookie是js和php互相传值的纽带.

  3. 用linux c求最大公约数

    我写了两中函数,一个是辗转相除法一个是更相减损法,主要代码如下: /*辗转相除法*/int gcd(int a, int b) { ) { return b; } else { return gcd( ...

  4. 并发编程 - 进程 - 1.队列的使用/2.生产者消费者模型/3.JoinableQueue

    1.队列的使用: 队列引用的前提: 多个进程对同一块共享数据的修改:要从硬盘读文件,慢,还要考虑上锁: 所以就出现了 队列 和 管道 都在内存中(快): 队列 = 管道 + 上锁 用队列的目的: 进程 ...

  5. 剑指Offer——复杂链表的复制

    题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用, ...

  6. MyEclipse 10的使用技巧

    默认快捷键 :Shift+Alt+s 然后选择generater getter and setter,这是快捷键.或者右键source里边有 generater getter and setter. ...

  7. TypeScript教程

    汇智课堂 地址  http://www.hubwiz.com/course/55b724ab3ad79a1b05dcc26c/ TypeScript是一种由微软开发的自由和开源的编程语言.它是Java ...

  8. 如何制作一款HTML5 RPG游戏引擎——第五篇,人物&人物特效

    上一次,我们实现了对话类,今天就来做一个游戏中必不可少的——人物类. 当然,你完全是可以自己写一个人物类,但是为了方便起见,还是决定把人物类封装到这个引擎里. 为了使这个类更有意义,我还给人物类加了几 ...

  9. python学习笔记(二十)初识面向对象

    面向对象的编程的主要思想是把构成问题的各个事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述一个事物在解决问题的过程中经历的步骤和行为.对象作为程序的基本单位,将程序和数据封装其中, ...

  10. 利用ssh的私钥登录Linux server

    [https://blog.csdn.net/hello0370/article/details/41650513] 1.创建一个private key的文件,我使用vim编辑器,创建vi my_pr ...