首页 > 代码库 > DbUtil组件及C3P0数据库连接池组件的使用
DbUtil组件及C3P0数据库连接池组件的使用
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,方便代码调用
1 public class JdbcUtil { 2 private static String url = "jdbc:mysql:///test01"; 3 private static String user = "root"; 4 private static String password = "123456"; 5 //获取QueryRunner对象 6 public static QueryRunner getQueryRunner(){ 7 return new QueryRunner(); 8 } 9 //获取连接10 public static Connection getConnection(){11 try {12 Class.forName("com.mysql.jdbc.Driver");13 return DriverManager.getConnection(url, user, password);14 } catch (Exception e) {15 e.printStackTrace();16 throw new RuntimeException(e);17 }18 }19 }
2、调用query方法
1 @Test 2 public void test1() { 3 List<Student> list = null; 4 try { 5 Connection conn = JdbcUtil.getConnection(); 6 list = JdbcUtil.getQueryRunner().query(conn, "select * from Student" 7 , new BeanListHandler<Student>(Student.class)); 8 } catch (Exception e) { 9 e.printStackTrace();10 throw new RuntimeException(e);11 }12 if(list !=null){13 for (Student student : list) {14 System.out.println(student);15 }16 }17 }
使用C3P0数据库连接池组件优化程序性能
C3P0核心类:ComboPooledDataSource
使用:
前提 引入jar文件 : c3p0-0.9.1.2.jar
方式一:不使用配置文件
1、简单建立一个jdbc工具类,方便方法调用
1 import java.beans.PropertyVetoException; 2 import java.sql.Connection; 3 import org.apache.commons.dbutils.QueryRunner; 4 5 import com.mchange.v2.c3p0.ComboPooledDataSource; 6 7 8 public class JdbcUtil { 9 private static String url = "jdbc:mysql:///test01";10 private static String user = "root";11 private static String password = "123456";12 private static ComboPooledDataSource dataSource = null;13 private Connection con = null;14 static{15 //初始化操作16 dataSource = new ComboPooledDataSource();// 使用默认的配置17 dataSource.setJdbcUrl(url);//设置连接字符串18 try {19 dataSource.setDriverClass("com.mysql.jdbc.Driver");//获取驱动20 } catch (PropertyVetoException e) {21 e.printStackTrace();22 }23 dataSource.setUser(user);//用户名24 dataSource.setPassword(password);//密码25 dataSource.setInitialPoolSize(3);//初始化时获取三个连接26 dataSource.setMaxPoolSize(6);//连接池中保留的最大连接数27 dataSource.setMaxIdleTime(60); //最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃28 }29 30 //获取QueryRunner对象31 public static QueryRunner getQueryRunner(){32 return new QueryRunner(dataSource);33 }34 //获取连接纯 通过c3p0核心类对象获取(此例子没用到该方法)35 public static Connection getConnection(){36 try {37 return dataSource.getConnection();38 } catch (Exception e) {39 e.printStackTrace();40 throw new RuntimeException(e);41 }42 }43 }
2、执行测试
1 @Test 2 public void test1() { 3 List<Student> list = null; 4 try { 5 Connection conn = JdbcUtil.getConnection(); 6 list = JdbcUtil.getQueryRunner().query("select * from Student" 7 , new BeanListHandler<Student>(Student.class)); 8 } catch (Exception e) { 9 e.printStackTrace();10 throw new RuntimeException(e);11 }12 if(list !=null){13 for (Student student : list) {14 System.out.println(student);15 }16 }17 }
方式二:使用配置文件来初始化
1、将C3P0配置文件c3p0-config.xml放置在工程src目录下
c3p0-config.xml
1 <c3p0-config> 2 <!-- 默认加载配置 --> 3 <default-config> 4 <property name="driverClass">com.mysql.jdbc.Driver</property> 5 <property name="jdbcUrl">jdbc:mysql://localhost:3306/test01</property> 6 <property name="user">root</property> 7 <property name="password">123456</property> 8 <property name="initialPoolSize">5</property> 9 <property name="maxPoolSize">10</property> 10 </default-config>11 <!-- 指定名称加载配置 -->12 <named-config name="C3P0TestName">13 <property name="driverClass">com.mysql.jdbc.Driver</property> 14 <property name="jdbcUrl">jdbc:mysql://localhost:3306/test01</property> 15 <property name="user">root</property> 16 <property name="password">123456</property> 17 <property name="initialPoolSize">5</property> 18 <property name="maxPoolSize">10</property> 19 </named-config>20 21 </c3p0-config>
2、简单编写一个工具类,方便代码调用
1 import java.sql.Connection; 2 import org.apache.commons.dbutils.QueryRunner; 3 4 import com.mchange.v2.c3p0.ComboPooledDataSource; 5 6 7 public class JdbcUtil { 8 private static ComboPooledDataSource dataSource = null; 9 static{10 //初始化操作11 // 自动加载src目录下c3p0的配置文件【c3p0-config.xml】12 dataSource = new ComboPooledDataSource();// 使用默认的配置13 //使用c3p0-config.xml配置文件中named-config的name属性为C3P0TestName的配置14 //dataSource = new ComboPooledDataSource("C3P0TestName");15 }16 17 //获取QueryRunner对象18 public static QueryRunner getQueryRunner(){19 return new QueryRunner(dataSource);20 }21 //获取连接纯 通过c3p0核心类对象获取(此例子没用到该方法)22 public static Connection getConnection(){23 try {24 return dataSource.getConnection();25 } catch (Exception e) {26 e.printStackTrace();27 throw new RuntimeException(e);28 }29 }30 }
3、执行测试
1 @Test 2 public void test1() { 3 List<Student> list = null; 4 try { 5 Connection conn = JdbcUtil.getConnection(); 6 list = JdbcUtil.getQueryRunner().query("select * from Student" 7 , new BeanListHandler<Student>(Student.class)); 8 } catch (Exception e) { 9 e.printStackTrace();10 throw new RuntimeException(e);11 }12 if(list !=null){13 for (Student student : list) {14 System.out.println(student);15 }16 }17 }
完毕.
DbUtil组件及C3P0数据库连接池组件的使用