c3p0 连接池的使用
1、写xml文件
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:///web08</property> <property name="user">root</property> <property name="password">root</property> <property name="initialPoolSize">5</property> <property name="maxPoolSize">20</property> </default-config> <named-config name="itheima"> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql:///web08</property> <property name="user">root</property> <property name="password">root</property> </named-config> </c3p0-config>
2、用来获取连接的工具类
C3P0Utils.java
package cn.itheima.jdbc.utils; import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; public class C3P0Utils { private static ComboPooledDataSource dataSource = new ComboPooledDataSource();//获取默认配置 private static ComboPooledDataSource dataSource = new ComboPooledDataSource("itheima"); public static DataSource getDataSource() { return dataSource; } public static Connection getConnection() { try { return dataSource.getConnection(); } catch (SQLException e) { throw new RuntimeException(e); } } }
3、测试类
TestC3P0.java
package cn.itheima.jdbc.test; import java.sql.Connection; import java.sql.PreparedStatement; import org.junit.Test; import com.mchange.v2.c3p0.ComboPooledDataSource; import cn.itheima.jdbc.utils.C3P0Utils; import cn.itheima.jdbc.utils.JDBCUtils_V3; public class TestC3P0 { @Test public void testAddUser1() { Connection conn = null; PreparedStatement pstmt = null; try { // 2.从池子中获取连接 conn = C3P0Utils.getConnection(); String sql = "insert into tbl_user values(null,?,?)"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, "吕布3"); pstmt.setString(2, "貂蝉3"); int rows = pstmt.executeUpdate(); if (rows > 0) { System.out.println("添加成功!"); } else { System.out.println("添加失败!"); } } catch (Exception e) { throw new RuntimeException(e); } finally { JDBCUtils_V3.release(conn, pstmt, null); } } @Test public void testAddUser() { Connection conn = null; PreparedStatement pstmt = null; // 1.创建自定义连接池对象 ComboPooledDataSource dataSource = new ComboPooledDataSource();// 加载默认的配置 // ComboPooledDataSource dataSource = new // ComboPooledDataSource("itheima");//加载有名称的配置 try { // 2.从池子中获取连接 conn = dataSource.getConnection(); String sql = "insert into tbl_user values(null,?,?)"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, "吕布2"); pstmt.setString(2, "貂蝉2"); int rows = pstmt.executeUpdate(); if (rows > 0) { System.out.println("添加成功!"); } else { System.out.println("添加失败!"); } } catch (Exception e) { throw new RuntimeException(e); } finally { JDBCUtils_V3.release(conn, pstmt, null); } } }
附加类JDBCUtils_V3
package cn.itheima.jdbc.utils; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; import java.util.ResourceBundle; /** * 提供获取连接和释放资源的 方法 * * @author Never Say Never * @date 2016年7月29日 * @version V1.0 */ public class JDBCUtils_V3 { private static String driver; private static String url; private static String username; private static String password; /** * 静态代码块加载配置文件信息 */ static { try { // 1.通过当前类获取类加载器 ClassLoader classLoader = JDBCUtils_V3.class.getClassLoader(); // 2.通过类加载器的方法获得一个输入流 InputStream is = classLoader.getResourceAsStream("db.properties"); // 3.创建一个properties对象 Properties props = new Properties(); // 4.加载输入流 props.load(is); // 5.获取相关参数的值 driver = props.getProperty("driver"); url = props.getProperty("url"); username = props.getProperty("username"); password = props.getProperty("password"); } catch (IOException e) { e.printStackTrace(); } } /** * 获取连接方法 * * @return */ public static Connection getConnection() { Connection conn = null; try { Class.forName(driver); conn = DriverManager.getConnection(url, username, password); } catch (Exception e) { e.printStackTrace(); } return conn; } /** * 释放资源方法 * * @param conn * @param pstmt * @param rs */ public static void release(Connection conn, PreparedStatement pstmt, ResultSet rs) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }