DbUtils

是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。

使用commons-dbutils 的核心工具类:QueryRunner,该类定义了所有操作数据库的方法

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

DbUtils提供的封装结果的一些对象:

1) BeanHandler  查询返回单个对象(常用)

2) BeanListHandler  查询返回list集合,集合元素是指定的对象(常用)

3)  ArrayHandler  查询返回结果记录的第一行,封装对对象数组, 即返回:Object[]

4)  ArrayListHandler 把查询的每一行都封装为对象数组,再添加到list集合中

5)  ScalarHandler 查询返回结果记录的第一行的第一列  (在聚合函数统计的时候用)

6)  MapHandler  查询返回结果的第一条记录封装为map

使用:

前提:实体类必须符合javabean规范,并且实体类中的字段必须与数据库表的字段相同。引入jar文件 : commons-dbutils-1.6.jar

1、简单创建一个工具类JdbcUtil,方便代码调用

 public class JdbcUtil {
private static String url = "jdbc:mysql:///test01";
private static String user = "root";
private static String password = "123456";
//获取QueryRunner对象
public static QueryRunner getQueryRunner(){
return new QueryRunner();
}
//获取连接
public static Connection getConnection(){
try {
Class.forName("com.mysql.jdbc.Driver");
return DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}

2、调用query方法

 @Test
public void test1() {
List<Student> list = null;
try {
Connection conn = JdbcUtil.getConnection();
list = JdbcUtil.getQueryRunner().query(conn, "select * from Student"
, new BeanListHandler<Student>(Student.class));
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
if(list !=null){
for (Student student : list) {
System.out.println(student);
}
}
}

使用C3P0数据库连接池组件优化程序性能

C3P0核心类:ComboPooledDataSource

使用:

前提 引入jar文件 : c3p0-0.9.1.2.jar
方式一:不使用配置文件

1、简单建立一个jdbc工具类,方便方法调用

 import java.beans.PropertyVetoException;
import java.sql.Connection;
import org.apache.commons.dbutils.QueryRunner; import com.mchange.v2.c3p0.ComboPooledDataSource; public class JdbcUtil {
private static String url = "jdbc:mysql:///test01";
private static String user = "root";
private static String password = "123456";
private static ComboPooledDataSource dataSource = null;
private Connection con = null;
static{
//初始化操作
dataSource = new ComboPooledDataSource();// 使用默认的配置
dataSource.setJdbcUrl(url);//设置连接字符串
try {
dataSource.setDriverClass("com.mysql.jdbc.Driver");//获取驱动
} catch (PropertyVetoException e) {
e.printStackTrace();
}
dataSource.setUser(user);//用户名
dataSource.setPassword(password);//密码
dataSource.setInitialPoolSize(3);//初始化时获取三个连接
dataSource.setMaxPoolSize(6);//连接池中保留的最大连接数
dataSource.setMaxIdleTime(60); //最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃
} //获取QueryRunner对象
public static QueryRunner getQueryRunner(){
return new QueryRunner(dataSource);
}
//获取连接纯 通过c3p0核心类对象获取(此例子没用到该方法)
public static Connection getConnection(){
try {
return dataSource.getConnection();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}

2、执行测试

 @Test
public void test1() {
List<Student> list = null;
try {
Connection conn = JdbcUtil.getConnection();
list = JdbcUtil.getQueryRunner().query("select * from Student"
, new BeanListHandler<Student>(Student.class));
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
if(list !=null){
for (Student student : list) {
System.out.println(student);
}
}
}

方式二:使用配置文件来初始化

1、将C3P0配置文件c3p0-config.xml放置在工程src目录下

c3p0-config.xml

 <c3p0-config>
<!-- 默认加载配置 -->
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/test01</property>
<property name="user">root</property>
<property name="password">123456</property>
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">10</property>
</default-config>
<!-- 指定名称加载配置 -->
<named-config name="C3P0TestName">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/test01</property>
<property name="user">root</property>
<property name="password">123456</property>
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">10</property>
</named-config> </c3p0-config>

2、简单编写一个工具类,方便代码调用

 import java.sql.Connection;
import org.apache.commons.dbutils.QueryRunner; import com.mchange.v2.c3p0.ComboPooledDataSource; public class JdbcUtil {
private static ComboPooledDataSource dataSource = null;
static{
//初始化操作
// 自动加载src目录下c3p0的配置文件【c3p0-config.xml】
dataSource = new ComboPooledDataSource();// 使用默认的配置
//使用c3p0-config.xml配置文件中named-config的name属性为C3P0TestName的配置
//dataSource = new ComboPooledDataSource("C3P0TestName");
} //获取QueryRunner对象
public static QueryRunner getQueryRunner(){
return new QueryRunner(dataSource);
}
//获取连接纯 通过c3p0核心类对象获取(此例子没用到该方法)
public static Connection getConnection(){
try {
return dataSource.getConnection();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}

3、执行测试

 @Test
public void test1() {
List<Student> list = null;
try {
Connection conn = JdbcUtil.getConnection();
list = JdbcUtil.getQueryRunner().query("select * from Student"
, new BeanListHandler<Student>(Student.class));
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
if(list !=null){
for (Student student : list) {
System.out.println(student);
}
}
}

完毕.

DbUtil组件及C3P0数据库连接池组件的使用的更多相关文章

  1. python Mysql数据库连接池组件封装(转载)

    以前一直在用Java来开发,数据库连接池等都是有组件封装好的,直接使用即可,最近在尝试Python的学习,碰到了和数据库打交道的问题,和数据库打交道我们都知道,数据库连接池必不可少,不然要么就是程序异 ...

  2. Hibernate第十一篇【配置C3P0数据库连接池、线程Session】

    Hibernate连接池 Hibernate自带了连接池,但是呢,该连接池比较简单..而Hibernate又对C3P0这个连接池支持-因此我们来更换Hibernate连接池为C3P0 查看Hibern ...

  3. [原创]java WEB学习笔记80:Hibernate学习之路--- hibernate配置文件:JDBC 连接属性,C3P0 数据库连接池属性等

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. c3p0数据库连接池无法连接数据库—错误使用了username关键字

    一.问题描述 上篇博客说到了关于maven无法下载依赖jar包的问题,这篇博客再说一下关于在本个项目中遇到的关于使用C3P0连接池连接数据库的问题,真心很奇葩,在此,也请大家引起注意.首先看我的项目基 ...

  5. 【Java EE 学习 16 上】【dbcp数据库连接池】【c3p0数据库连接池】

    一.回顾之前使用的动态代理的方式实现的数据库连接池: 代码: package day16.utils; import java.io.IOException; import java.lang.ref ...

  6. paip.c3p0 数据库连接池 NullPointerException 的解决...

    paip.c3p0 数据库连接池 NullPointerException 的解决... 程序ide里面运行正常..外面bat运行错误.. 作者Attilax  艾龙,  EMAIL:14665198 ...

  7. paip.提升稳定性---c3p0数据库连接池不能取到连接An attempt by a client to checkout a Connection has timed out

    paip.提升稳定性---c3p0数据库连接池不能取到连接An attempt by a client to checkout a Connection has timed out 作者Attilax ...

  8. c3p0数据库连接池(作用不重复)

    /* * c3p0数据库连接池: * 只被初始化一次 * connection对象进行close时,不是正的关闭,而是将该数据连接归还给数据库连接池 * * */ 四个架包 mysql-connect ...

  9. 第32讲 UI组件之 时间日期控件DatePicker和TimePicker

    第32讲 UI组件之 时间日期控件DatePicker和TimePicker 在Android中,时间日期控件相对来说还是比较丰富的.其中, DatePicker用来实现日期输入设置,    Time ...

随机推荐

  1. Linux设备驱动编程中的中断与定时器处理

    所谓中断是指CPU在执行过程中,出现某些突发时间急待处理,CPU必须暂停执行当前的程序,转去处理突发事件,处理完毕后CPU又返回原程序被中断的位置并继续执行. 中断分为(根据中断源来分):  内部中断 ...

  2. PHP字符串操作常用函数

    /* * 确定字符串长度 * int strlen(string str) * 比较两个字符串 * 1.strcmp函数对两个字符串进行二进制安全的比较,并区分大小写 * int strcmp(str ...

  3. 在浏览器中使用jquery取得iframe中页面中指定元素的值的不同

    自己使用aspx页面中嵌套了ascx的页面其中使用了iframe的一些内容,出现了同一个页面的两种取值的方式 1. 在iframe的包含页面,需要使用iframe的页面中的元素,是需要使用$(wind ...

  4. PC-经典之“运行里面的密密”

    msconfig.exe 你自己往里面输入这个字母就可以看到了,试试看,还有,我这里有一些可以在"运行"栏里输入的命令,一并给你: 以下为Windows操作系统的常用运行命令,执行 ...

  5. Android完美解决输入框EditText隐藏密码打勾显示密码问题

    长话短说,一共有两种方法.首先你需要在布局文件里面给EditText设置一个android:inputType="numberPassword"属性.我这里默认规定密码只能是数字了 ...

  6. 文件正在上传的转圈圈gif图片引出的fixed定位和absolute定位

     文件正在上传的转圈圈gif图片  一.文件上传时,未上传返回成功状态之前给个gif动态图片显示在页面,改善用户体验. <!--S 遮罩层 --> <div id="mas ...

  7. vbs运行批处理

    dim wshellset wshell=createobject("wscript.shell") wshell.run "cmd /c sc query Spoole ...

  8. wechat客户端修改

    1. src/ui/adapter/FriendCardAdapter.java @Override     public View getView(int position, View conver ...

  9. Ubuntu设置目录的读写权限(Linux命令chmod 777 dirName)

    更改文件所有者 sudo chown system_username /location_of_files_or_folders 更改文件的权限 鼠标右按钮点击文件/目录 -> 属性 权限 分页 ...

  10. MYSQLD c++函数修饰名转换工具c++filt

    会话1: mysql> select now(); 会话2: [root@localhost ~]# stap -v -e 'probe process("/usr/local/mys ...