1. 目的
每次使用JDBC的時候都要書寫冗長的代碼段,不符合復用的理念,於是要單獨寫一個類,將通用的JDBC操作寫到一個類中,便於重復使用和精簡代碼。
2. 步驟
(1)注冊驅動並獲取連接
為了最大精簡獲取連接的簡化性和通用性,這里需要使用到配置文件 jdbc.properties 解決。
1) 創建一個文件,放到項目中,要更換別的連接時,只需修改配置文件即可,無需修改類文件和重新編譯。
driver=數據庫驅動路徑 url=url連接字符串 user=用戶名 password=密碼
2) 然后就需要將配置文件中鍵值對中的值取出,並注冊了驅動。因為驅動和取出配置文件只需要一次就可以,所以就寫入到靜態代碼塊中,在程序運行的開始就處理好了,無需以后再冗余執行。
// 定義靜態變量,使用靜態代碼獲取配置文件的值
private static String url; private static String user; private static String password; private static String driver; // 使用靜態代碼注冊驅動並給靜態變量賦值
static{ try { // 創建Properties集合類
Properties pro = new Properties(); // 獲取src路徑下文件,使用ClassLoader類加載器
ClassLoader classLoader = JDBCUtils.class.getClassLoader(); // URL定位了文件的絕對路徑
URL res = classLoader.getResource("jdbc.properties"); // 獲取字符串路徑
String path = res.getPath(); // 讀取文件
pro.load(new FileReader(path)); // 給靜態變量賦值
url = pro.getProperty("url"); user = pro.getProperty("user"); password = pro.getProperty("password"); driver = pro.getProperty("driver"); // 注冊驅動
Class.forName(driver); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } }
3) 獲取連接
public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url, user, password); }
(2)釋放資源
因為有的sql語句需要用結果集對象,所以使用兩個重載方法釋放資源。
/** * @Author ZhaoPeiXuan * @Description 釋放資源 * @Date 22:08 2019/9/16 * @Param [stmt 執行sql的對象, conn 數據庫連接對象] * @return void **/
public static void close(Statement stmt, Connection conn){ if(stmt != null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn != null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * @Author ZhaoPeiXuan * @Description 釋放資源Pro版 * @Date 22:13 2019/9/16 * @Param [rs 結果集對象, stmt 執行sql的對象, conn 數據庫連接對象] * @return void **/
public static void close(ResultSet rs, Statement stmt, Connection conn){ 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(); } } }
3. 簡化后的代碼
Connection conn = null; Statement stmt = null; ResultSet rs = null; try { conn = JDBCUtils.getConnection(); String sql = "SQL語句"; stmt = conn.createStatement(); rs = stmt.executeQuery(sql); } catch (SQLException e) { e.printStackTrace(); } finally { JDBCUtils.close(rs, stmt, conn); }