说明:小白入门,有任何问题欢迎指出交流
文档链接:https://www.mchange.com/projects/c3p0/
首先引入相应jar包:c3p0-0.9.1.2.jar。外部引入的jar包一般存放在项目文件夹中的lib文件夹中,然后通过eclipse的buildpath引入到当前项目中(环境变量中)
然后编写相应配置文件,配置文件编写方式可以参考C3P0官网的文档说明
XML配置文件编写方式参考如下:
文件中的
最后通过编写C3P0连接池的工具类,方便以后通过C3P0连接池来获取和归还相应的Connection对象,参考代码如下:
public class C3P0_Utils {
//加载xml中的配置
private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
//获取dataSource对象
public static DataSource getComboPooledDataSource() {
return dataSource;
}
//获取链接
public static Connection getConnection() {
try {
return dataSource.getConnection();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
导入jar包:commons-dbcp-1.4.jar 和 commons-pool-1.5.6.jar
编写properties配置文件信息,可以参考官方的文档说明,格式如下:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql:///web08?useUnicode=true&characterEncoding=utf8&useSSL=true
user=root
password=420054
编写工具类:
public class DBCP_Utils {
private static DataSource dataSource;
static {
try {
/*
* 获取连接池的方法:
* 通过使用类加载器和配置文件流来获取配置文件信息
* 最后通过DBCP的工厂方法创建连接池对象
* */
InputStream is = DBCP_Utils.class.getClassLoader().getResourceAsStream("db2.properties");
Properties props = new Properties();
props.load(is);
dataSource = BasicDataSourceFactory.createDataSource(props);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static Connection getConnection() {
try {
return dataSource.getConnection();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public static DataSource getDataSource() {
return dataSource;
}
}
引入jar包:commons-dbutils-1.4.jar
代码使用参考如下:
首先创建QueryRunner对象,使用C3P0获取链接池传递给QueryRunner
然后编写相应sql语句,通过QueryRunner对象来执行query 和 update方法,使用query方法需要创建Handler对象,最后查询到的结果会存放在Handler对象中。
结果为多行一般使用带有List字样的Handler.
BeanListHandler MapListHandler ColumnListHandler
结果为单行则不用带List的Handler
BeanHandler MapHandler ScalarHandler
package jdbc.test;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;
import jdbc.domain.User;
import jdbc.utils.C3P0_Utils;
public class TestDBUtils {
/**
* 查询所有用户的方法
*/
@Test
public void testQueryAll3() {
try {
QueryRunner qr = new QueryRunner(C3P0_Utils.getComboPooledDataSource());
String sql = "select * from tbl_user";
Listlist = qr.query(sql, new BeanListHandler(User.class));
for (User user : list) {
System.out.println(user.getUname()+" : "+user.getUpassword());
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 根据id查询用户
*/
@Test
public void testQueryUserById() {
try {
QueryRunner qr = new QueryRunner(C3P0_Utils.getComboPooledDataSource());
String sql = "select * from tbl_user where uid=?";
Object[] params = {17};
User user = qr.query(sql, new BeanHandler(User.class), params);
System.out.println(user.getUname()+" : "+user.getUpassword());
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 查询所有用户的个数
*/
@Test
public void testQueryCount() {
try {
QueryRunner qr = new QueryRunner(C3P0_Utils.getComboPooledDataSource());
String sql = "select count(*) from tbl_user";
Long count = (Long)qr.query(sql, new ScalarHandler());
System.out.println(count);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 查询所有用户的方法2
*/
@Test
public void testQueryAll2() {
try {
// 创建核心类QueryRunner()
QueryRunner qr = new QueryRunner(C3P0_Utils.getComboPooledDataSource());
// 编写sql语句
String sql = "select * from tbl_user";
// 执行sql语句
List