一、C3P0連接池
1、導入jar包
mysql-connector-java-5.0.4-bin.jar
c3p0-0.9.1.2.jar
2、創建C3P0配置文件
C3P0配置文件命名必須是c3p0-config.xml
<?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/jdbcdb</property>
<property name="user">root</property>
<property name="password">123456</property>
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">20</property>
</default-config>
<named-config name="MyConfig">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbcdb</property>
<property name="user">root</property>
<property name="password">123456</property>
</named-config>
</c3p0-config>
3、編寫C3P0工具類
package com.utils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3P0Util {
//方法一、不需要傳參,會找c3p0配置文件中<default-config>默認配置
private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
//方法二、需要傳參,會找c3p0配置文件中<named-config>中名稱對應的配置
//private static ComboPooledDataSource dataSource = new ComboPooledDataSource("MyConfig");
public static DataSource getDataSource(){
return dataSource;
}
public static Connection getConnection(){
try {
return dataSource.getConnection();
} catch (SQLException e) {
throw new RuntimeException();
}
}
public static void release(Connection conn, PreparedStatement ps, ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
4、測試類
@Test
public void dbOpt(){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = C3P0Util.getConnection();
String sql = "select * from tbl_user";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
System.out.println(rs.getString(2)+":"+rs.getString(3));
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
C3P0Util.release(conn, ps, rs);
}
}
注意:連接池對數據庫操作完成後必須 con.close() 掉,執行 con.close() 並不會關閉與數據庫的連接,而是將連接還回到連接池中,如果不 close 掉的話,這個連接將會一直被佔用,直到連接池中的連接耗盡爲止。
二、DBUtils工具類
1、導入jar包
commons-dbutils-1.4.jar
2、編寫DBUtils工具類的增刪改方法
package com.utils;
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import org.junit.Test;
/**
* 測試DBUtils工具類的增刪改操作
*/
public class TestDBUtils1 {
/**
* 添加所有用戶方法
*/
@Test
public void testAddUser() {
try {
// 1.創建核心類QueryRunner
QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
// 2.編寫SQL語句
String sql = "insert into tbl_user values(null,?,?)";
// 3.爲站位符設置值
Object[] params = { "餘淮", "耿耿" };
// 4.執行添加操作
int rows = qr.update(sql, params);
if (rows > 0) {
System.out.println("添加成功!");
} else {
System.out.println("添加失敗!");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 根據id修改用戶方法
*
*/
@Test
public void testUpdateUserById() {
try {
// 1.創建核心類QueryRunner
QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
// 2.編寫SQL語句
String sql = "update tbl_user set upassword=? where id=?";
// 3.爲站位符設置值
Object[] params = { "xxx", 2 };
// 4.執行添加操作
int rows = qr.update(sql, params);
if (rows > 0) {
System.out.println("修改成功!");
} else {
System.out.println("修改失敗!");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 根據id刪除用戶方法
*/
@Test
public void testDeleteUserById() {
try {
// 1.創建核心類QueryRunner
QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
// 2.編寫SQL語句
String sql = "delete from tbl_user where id=?";
// 3.爲站位符設置值
Object[] params = {2};
// 4.執行添加操作
int rows = qr.update(sql, params);
if (rows > 0) {
System.out.println("刪除成功!");
} else {
System.out.println("刪除失敗!");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
3、創建javabean類,給查詢操作使用
package com.utils;
public class User {
private int id;
private String uName;
private String uPassword;
public User() {}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getuName() {
return uName;
}
public void setuName(String uName) {
this.uName = uName;
}
public String getuPassword() {
return uPassword;
}
public void setuPassword(String uPassword) {
this.uPassword = uPassword;
}
}
4、編寫DBUtils工具類的查詢操作
package com.utils;
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;
/**
* 測試DBUtils查詢操作
*/
public class TestDBUtils2 {
/*
* 查詢所有用戶方法
* JavaBean獲取
*/
@Test
public void testQueryAll() {
try {
// 1.獲取核心類queryRunner
QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
// 2.編寫sql語句
String sql = "select * from tbl_user";
// 3.執行查詢操作
List<User> users = qr.query(sql, new BeanListHandler<User>(User.class));
// 4.對結果集集合進行遍歷
for (User user : users) {
System.out.println(user.getuName() + " : " + user.getuPassword());
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/*
* 根據id查詢用戶方法
* JavaBean獲取
*/
@Test
public void testQueryUserById() {
try {
// 1.獲取核心類queryRunner
QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
// 2.編寫sql語句
String sql = "select * from tbl_user where id=?";
//3.爲佔位符設置值
Object[] params = {1};
// 4.執行查詢操作
User user = qr.query(sql, new BeanHandler<User>(User.class), params);
System.out.println(user.getuName() + " : " + user.getuPassword());
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/*
* 根據所有用戶的總個數
*/
@Test
public void testQueryCount() {
try {
// 1.獲取核心類queryRunner
QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
// 2.編寫sql語句
String sql = "select count(*) from tbl_user";
// 4.執行查詢操作
Long count = (Long) qr.query(sql, new ScalarHandler());
System.out.println(count);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/*
* 查詢所有用戶方法
* Map獲取
*/
@Test
public void testQueryAll1() {
try {
// 1.獲取核心類queryRunner
QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
// 2.編寫sql語句
String sql = "select * from tbl_user";
// 3.執行查詢操作
List<Map<String, Object>> list = qr.query(sql, new MapListHandler());
// 4.對結果集集合進行遍歷
for (Map<String, Object> map : list) {
System.out.println(map);
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/*
* 查詢所有用戶的uname字段的信息
*/
@Test
public void testQueryAll2() {
try {
// 1.獲取核心類queryRunner
QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
// 2.編寫sql語句
String sql = "select * from tbl_user";
// 3.執行查詢操作
List<Object> list = qr.query(sql, new ColumnListHandler("uname"));
// 4.對結果集集合進行遍歷
for (Object object : list) {
System.out.println(object);
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
注意:使用DBUtils對數據庫操作完成後不需要手動 close() 。