在jdbc基础上进阶一小步的C3p0 连接池(DBCP 不能读xml配置文件,已淘汰) 和DBUtils 中两个主要类QueryRunner和ResultSetHandler的使用
首先看C3p0这个连接池,最大优势可以自动读取默认的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/swift_db
</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="initialPoolSize">20</property>
<property name="acquireIncrement">5</property>
<property name="maxPoolSize">50</property>
<property name="minPoolSize">5</property>
</default-config>
</c3p0-config>
配置文件中有常规的4个主选项和一些其他配置
只需要使用C3p0中的实现javax.sql.DateSource接口的实现类ComboPooledDataSource 创建对象即可
private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
这个是放成员变量那,只要new 空参就会自动调用xml配置文件,配置文件需要标签<default-config>
也可以调用命名的配置文件,需要配置文件<named-config>
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<named-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/swift_db
</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="initialPoolSize">20</property>
<property name="acquireIncrement">5</property>
<property name="maxPoolSize">50</property>
<property name="minPoolSize">5</property>
</named-config>
</c3p0-config>
一般把C3p0做成工具类使用,方便调用
package com.swift.base; import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; public class C3p0Utils { // 数据源连接池c3p0作用不用每次建立连接,浪费资源与等待时间,把连接做好放在连接池中,需要时获取
// c3p0连接池可以通过配置文件c3p0-config.xml文件自动读取相关属性
// c3p0连接池是java中 javax.sql.DataSource的实现类,其中必须实现getConnection方法
private static ComboPooledDataSource dataSource = new ComboPooledDataSource("swift"); // 获得数据源(连接池)的方法
public static DataSource getDataSource() {
return dataSource;
} // 从连接池中获得一个conn资源的
public static Connection getConnection() throws Exception {
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/swift_db");
dataSource.setUser("root");
dataSource.setPassword("root");
dataSource.setAcquireIncrement(5);
dataSource.setInitialPoolSize(20);
dataSource.setMinPoolSize(5);
dataSource.setMaxPoolSize(50); Connection conn = dataSource.getConnection();
return conn;
} public static void close(Connection conn, Statement stmt, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} }
这个已经调用了xml配置文件,每次又调用Connection都会来一遍属性配置,浪费资源,可以用静态代码块,只调用一次即可
package com.swift.jinji; import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.SQLException; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; /*使用C3P0获得10个连接对象
要求:不使用配置文件*/ public class C3p0_10con { private static ComboPooledDataSource dataSource = new ComboPooledDataSource(); static {
try {
dataSource.setDriverClass("com.mysql.jdbc.Driver");
} catch (PropertyVetoException e) {
e.printStackTrace();
}
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/swift_db");
dataSource.setUser("root");
dataSource.setPassword("root");
dataSource.setInitialPoolSize(20);
dataSource.setAcquireIncrement(5);
dataSource.setMaxPoolSize(50);
dataSource.setMinPoolSize(5);
} public static void main(String[] args) throws PropertyVetoException { for(int i=0;i<10;i++) {
System.out.println(C3p0_10con.getConnection());
}
} public static DataSource getDataSource() {
return dataSource; } public static Connection getConnection() { Connection con = null;
try {
con = dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return con; } public static void close(Connection con) {
if(con!=null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} }
配合DBUtils的QureyRunner类和ResultSetHandler类使用,更加方便数据库增删改与查询
package com.swift.jinji; import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
import java.util.Map; import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.KeyedHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler; import com.swift.base.C3p0Utils;
import com.swift.domain.Puppy; /*查询用户表中的第一条数据。并将数据封装成对象数组。*/ public class Qurey_Puppy { public static void main(String[] args) { QueryRunner qr=new QueryRunner(C3p0Utils.getDataSource());
String sql="select * from puppy;";
ResultSetHandler<Puppy> rsh=new BeanHandler<Puppy>(Puppy.class);
ResultSetHandler<Object[]> rsh1=new ArrayHandler();
ResultSetHandler<List<Object[]>> rsh2=new ArrayListHandler();
ResultSetHandler<Object> rsh3=new ScalarHandler("name");
ResultSetHandler<Map<String, Object>> rsh4=new MapHandler();
ResultSetHandler<List<Map<String, Object>>> rsh5=new MapListHandler();
ResultSetHandler<List<Object>> rsh6=new ColumnListHandler("name");
ResultSetHandler<Map<Object,Map<String,Object>>> rsh7=new KeyedHandler("id"); try {
Map<Object, Map<String, Object>> result = qr.query(sql, rsh7);
/* for(Object[] puppy:dog) { System.out.println(Arrays.toString(puppy));
}*/
// System.out.println(result); } catch (SQLException e) {
e.printStackTrace();
}
} }
ResultSetHandler有很多子类,可以放到各种容器中,从数据库取出数据后,将数据放到对象数组,数组集合,对象元素,Map集合,Map集合列表,对象列表,Map的Map中
在jdbc基础上进阶一小步的C3p0 连接池(DBCP 不能读xml配置文件,已淘汰) 和DBUtils 中两个主要类QueryRunner和ResultSetHandler的使用的更多相关文章
- java基础之JDBC七:C3P0连接池的使用
使用C3P0的前提是需要引入jar包 具体使用如下: /** * c3p0的应用 * 前提:引入c3p0的jar包 */ public class Test { public static void ...
- 网络协议 finally{ return问题 注入问题 jdbc注册驱动问题 PreparedStatement 连接池目的 1.2.1DBCP连接池 C3P0连接池 MYSQL两种方式进行实物管理 JDBC事务 DBUtils事务 ThreadLocal 事务特性 并发访问 隔离级别
1.1.1 API详解:注册驱动 DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用 原因有2个: >导致驱动被注册2 ...
- jdbc数据连接池dbcp要导入的jar包
jdbc数据连接池dbcp要导入的jar包 只用导入commons-dbcp-x.y.z.jarcommons-pool-a.b.jar
- Spring -- spring 中使用jdbc, c3p0连接池, dao概念
1. 示例代码 CustomerDao.java ,dao接口 public interface CustomerDao { public void insertCustomer(Customer ...
- 【JDBC】C3P0连接池的使用
C3P0连接池的c3p0-config.xml配置文件 <?xml version="1.0" encoding="UTF-8"?> <c3p ...
- day39-Spring 15-Spring的JDBC模板:C3P0连接池配置
<!-- 配置C3P0连接池 --> <bean id="dataSource2" class="com.mchange.v2.c3p0.ComboPo ...
- JDBC二部曲之_事物、连接池
事务 事务概述 事务的四大特性(ACID) 事务的四大特性是: l 原子性(Atomicity):事务中所有操作是不可再分割的原子单位.事务中所有操作要么全部执行成功,要么全部执行失败. l 一致 ...
- JDBC秒变C3P0连接池——再加连接解耦
从JDBC连接到C3P0数据库连接池 在Java开发中,使用JDBC操作数据库的四个步骤如下: ①加载数据库驱动程序(Class.forName("数据库驱动类");) ② ...
- java JDBC (八) 连接池 DBCP
package cn.sasa.demo1; import javax.sql.DataSource; import org.apache.commons.dbcp2.BasicDataSource; ...
随机推荐
- (转)DB2 8.2 for aix5L安装和配置步骤
DB2 8.2 for aix5L安装和配置步骤[@more@] AIX5.2上安装DB2 V8.2安装平台:IBM eserver,AIX 5.3 64位 一 删除以有的DB2系统: 1.停止DB2 ...
- MVC视图之间调用方法总结
调用视图方式有两种: 一:直接调用(不通过controller) <body> @Html.Partial("../Shared/Error"); </body& ...
- 【client】与【offset】
上面主要区分了[offset]和[client]开头的各个属性的意义,下面这张图是转载的,又加入了[scroll]开头的,和元素本身的[style] clientWidth 是对象看到的宽度(不含 ...
- POJ 3660—— Cow Contest——————【Floyd传递闭包】
Cow Contest Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit ...
- bundle绑定资源表
1.注册绑定资源表 在application_Start函数中: (注意不要加拓展名,否则压缩时出问题) BundleTable.Bundles.Add(new ScriptBundle(" ...
- 在CentOS上配置tomcat服务
# hapday start 2016-02-04 #!/bin/bash # description: Tomcat Start Stop Restart # processname: tomcat ...
- 拖拽事件--select外边框拖拽
地图上面的搜索框要可拖拽 但是搜索框是有点击事件的,点击显隐下拉菜单,如果拖拽的事件源选择select框的话,会有样式(十字拖动符cursor:move与selelt默认点击的箭头)冲突 思索良久,就 ...
- 让你的sharepoint2013具有EMS快递查询的功能
<iframe name="kuaidi100" src="http://www.kuaidi100.com/frame/app/index2.html" ...
- 8.5折!图表控件TeeChart特价中...
著名图表控件TeeChart去年除了在优势的.NET方面表现依旧出色外,还推出了通过Xamarin和MONO实现的Android,iOS和Mac OSX的跨平台方案,让C#开发者也能开发移动APP. ...
- ArcGIS Engine中的Symbols详解(转)
本文来源:http://blog.csdn.net/mengdong_zy/article/details/8980842 原文如下: Symbols Symbol level drawing Joi ...