今天我和认真的学习了传智播客的连接池的知识,学完之后,和以前使用的DBUtil混了,决定把他们一起罗列一下,供我以后查看。
首先,贴一下比较基础的DBUtil.java的代码,这是还没学连接池以前,所使用的比较基础的东西
package com.hpe.util;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class DBUtil {//1.定义链接数据库的属性private static String driver="com.mysql.jdbc.Driver";private static String url="jdbc:mysql://localhost:3306/personlife?useUnicode=true&characterEncoding=UTF-8&useSSL=true";private static String username="root";private static String password="123456";static{//静态代码块,只在类第一次被调用时加载try {Class.forName(driver);} catch (ClassNotFoundException e) {e.printStackTrace();}}//2.获取数据库的链接public static Connection getConn(){Connection conn=null;//加载驱动try {//.获取数据库链接conn=DriverManager.getConnection(url, username, password);} catch (Exception e) {e.printStackTrace();}return conn;}//关闭资源//1.关闭结果集public static void closeRs(ResultSet rs){//避免空指针if(rs!=null){try {rs.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}//1.关闭预编译语句public static void closePs(PreparedStatement ps){//避免空指针if(ps!=null){try {ps.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}//1.关闭链接public static void closeConn(Connection conn){//避免空指针if(conn!=null){try {conn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
}
学完连接池之后,转去使用JDBCUtil.java。其中,原始的不使用C3P0的代码是这样。另外还需要配置文件jdbc.properties
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost/bank
name=root
password=root
package com.itheima.uitl;import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;public class JDBCUtil {static String driverClass = null;static String url = null;static String name = null;static String password= null;static{try {//1. 创建一个属性配置对象Properties properties = new Properties();InputStream is = new FileInputStream("jdbc.properties");//使用类加载器,去读取src底下的资源文件。 后面在servlet
// InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");//导入输入流。properties.load(is);//读取属性driverClass = properties.getProperty("driverClass");url = properties.getProperty("url");name = properties.getProperty("name");password = properties.getProperty("password");} catch (Exception e) {e.printStackTrace();}}/*** 获取连接对象* @return*/public static Connection getConn(){Connection conn = null;try {Class.forName(driverClass);//静态代码块 ---> 类加载了,就执行。 java.sql.DriverManager.registerDriver(new Driver());//DriverManager.registerDriver(new com.mysql.jdbc.Driver());//DriverManager.getConnection("jdbc:mysql://localhost/test?user=monty&password=greatsqldb");//2. 建立连接 参数一: 协议 + 访问的数据库 , 参数二: 用户名 , 参数三: 密码。conn = DriverManager.getConnection(url, name, password);} catch (Exception e) {e.printStackTrace();}return conn;}/*** 释放资源* @param conn* @param st* @param rs*/public static void release(Connection conn , Statement st , ResultSet rs){closeRs(rs);closeSt(st);closeConn(conn);}public static void release(Connection conn , Statement st){closeSt(st);closeConn(conn);}private static void closeRs(ResultSet rs){try {if(rs != null){rs.close();}} catch (SQLException e) {e.printStackTrace();}finally{rs = null;}}private static void closeSt(Statement st){try {if(st != null){st.close();}} catch (SQLException e) {e.printStackTrace();}finally{st = null;}}private static void closeConn(Connection conn){try {if(conn != null){conn.close();}} catch (SQLException e) {e.printStackTrace();}finally{conn = null;}}
}
而使用了C3P0的JDBCUtil则相对简单一些,不过也需要配置文件c3p0-config.xml,其实也可以使用后缀为.properties的文件,但是xml比较常用
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config><!-- default-config 默认的配置, --><default-config><property name="driverClass">com.mysql.jdbc.Driver</property><property name="jdbcUrl">jdbc:mysql://localhost/bank</property><property name="user">root</property><property name="password">root</property><property name="initialPoolSize">10</property><property name="maxIdleTime">30</property><property name="maxPoolSize">100</property><property name="minPoolSize">10</property><property name="maxStatements">200</property></default-config><!-- This app is massive! --><named-config name="oracle"> <property name="acquireIncrement">50</property><property name="initialPoolSize">100</property><property name="minPoolSize">50</property><property name="maxPoolSize">1000</property><!-- intergalactoApp adopts a different approach to configuring statement caching --><property name="maxStatements">0</property> <property name="maxStatementsPerConnection">5</property><!-- he's important, but there's only one of him --><user-overrides user="master-of-the-universe"> <property name="acquireIncrement">1</property><property name="initialPoolSize">1</property><property name="minPoolSize">1</property><property name="maxPoolSize">5</property><property name="maxStatementsPerConnection">50</property></user-overrides></named-config></c3p0-config>
package com.itheima.uitl;import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;import com.mchange.v2.c3p0.ComboPooledDataSource;public class JDBCUtil02 {static ComboPooledDataSource dataSource = null;static{dataSource = new ComboPooledDataSource();}/*** 获取连接对象* @return* @throws SQLException */public static Connection getConn() throws SQLException{return dataSource.getConnection();}/*** 释放资源* @param conn* @param st* @param rs*/public static void release(Connection conn , Statement st , ResultSet rs){closeRs(rs);closeSt(st);closeConn(conn);}public static void release(Connection conn , Statement st){closeSt(st);closeConn(conn);}private static void closeRs(ResultSet rs){try {if(rs != null){rs.close();}} catch (SQLException e) {e.printStackTrace();}finally{rs = null;}}private static void closeSt(Statement st){try {if(st != null){st.close();}} catch (SQLException e) {e.printStackTrace();}finally{st = null;}}private static void closeConn(Connection conn){try {if(conn != null){conn.close();}} catch (SQLException e) {e.printStackTrace();}finally{conn = null;}}
}