自定義數據庫連接工具類
阿新 • • 發佈:2017-11-09
數據庫 工具類
這是一個代碼質量比較高的Util。這裏寫了兩種,一種是原始的,一種是使用C3P0的。數據庫使用的是MySQL5.7。
使用框架開發的時候根本不需要寫這些東西。其實框架也是這樣封裝的,但提供的功能會很豐富。這裏展現的是思路,供參考。
功能齊全的Dao工具類
DriverManager獲取連接的Util:
package util; import java.io.IOException; 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 DBUtil { //連接URL private static String jdbcUrl; //登錄用戶,配置文件中key不要命名為username或者userName,可能會出現沖突情況 private static String userName; //登錄密碼 private static String password; //實例化本地線程對象 private static ThreadLocal<Connection> thread = new ThreadLocal<Connection>(); static{ try { //獲取配置文件中的jdbc數據庫連接信息 Properties props = new Properties(); props.load(DBUtil.class.getResourceAsStream("/conf/dbinfo.properties")); String driverClass = props.getProperty("driverClass"); jdbcUrl = props.getProperty("jdbcUrl"); userName = props.getProperty("user"); password = props.getProperty("password"); //加載驅動 Class.forName(driverClass); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 獲取數據庫連接 * @return 數據庫連接Connection對象 * @throws SQLException */ public static Connection getConnection() throws SQLException{ if(thread.get() == null){ Connection conn = DriverManager.getConnection(jdbcUrl, userName, password); thread.set(conn); } return thread.get(); //不需要使用本地線程時,可以去掉上面代碼 // return DriverManager.getConnection(jdbcUrl, userName, password); } /** * 關閉連接,釋放資源 * @param conn Connection對象 * @param stmt Statement對象,可接收子類PreparedStatement對象 * @param rs ResultSet對象 */ public static void closeAll( 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(); } } thread.remove(); //移除本地線程中的Connection對象 } public static void main(String[] args) throws SQLException { System.out.println(getConnection()); } }
使用C3P0連接池的Util:
package com.sourong.util; import java.beans.PropertyVetoException; import java.io.IOException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import com.mchange.v2.c3p0.ComboPooledDataSource; /** * c3p0連接池工具類 * */ public class C3p0DBUtil { //實例化c3p0連接池對象 private static ComboPooledDataSource c3p0 = new ComboPooledDataSource(); //實例化本地線程對象 private static ThreadLocal<Connection> thread = new ThreadLocal<Connection>(); static{ //給c3p0配置參數 try { Properties props = new Properties(); props.load(C3p0DBUtil.class.getResourceAsStream("/dataSource.properties")); //設定數據庫連接驅動類 c3p0.setDriverClass(props.getProperty("driverClass")); //設定jdbc連接URL c3p0.setJdbcUrl(props.getProperty("jdbcUrl")); //設定連接登錄用戶名 c3p0.setUser(props.getProperty("user")); //設定連接登錄密碼 c3p0.setPassword(props.getProperty("password")); //設定當連接池中的連接耗盡的時候c3p0一次同時獲取的連接數 c3p0.setAcquireIncrement(Integer.valueOf(props.getProperty("acquireIncrement"))); //設定初始化時獲取十個連接,取值應在minPoolSize與maxPoolSize之間 c3p0.setInitialPoolSize(Integer.valueOf(props.getProperty("initialPoolSize"))); //設定連接池中保留的最小連接數 c3p0.setMinPoolSize(Integer.valueOf(props.getProperty("minPoolSize"))); //設定連接池中保留的最大連接數 c3p0.setMaxPoolSize(Integer.valueOf(props.getProperty("maxPoolSize"))); } catch (PropertyVetoException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 通過C3p0連接池,獲取數據庫連接 * @return 數據庫連接Connection對象 * @throws SQLException */ public static Connection getConnection() throws SQLException{ if(thread.get() == null){ Connection conn = c3p0.getConnection(); thread.set(conn); } return thread.get(); } /** * 關閉連接,釋放資源 * @param conn Connection對象 * @param stmt Statement對象,可接收子類PreparedStatement對象 * @param rs ResultSet對象 */ public static void closeAll( 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(); } } thread.remove(); //移除本地線程中的Connection對象 } public static void main(String[] args) throws SQLException { System.out.println(getConnection()); } }
自定義數據庫連接工具類