1. 為什么要封裝JDBC工具類:減少重復(fù)代碼、提高代碼復(fù)用性、簡(jiǎn)化數(shù)據(jù)庫(kù)操作、統(tǒng)一管理數(shù)據(jù)庫(kù)連接、便于維護(hù)和修改
2.封裝工具類的簡(jiǎn)單示例代碼:
package com.study.jdbc;
import java.sql.*;
import java.util.ResourceBundle
/*
* */
/**
* 工具類的構(gòu)造方法一般是私有化的,因?yàn)楣ぞ哳愔械囊话闶庆o態(tài)的,
* 工具類就是為了方便變成,所以工具類中的方法都是直接采用類名
* 的方式訪問(wèn),因此不需要new對(duì)象
* @param
* @return
*/
public class DBUtils {
private DBUtils() {}
private static String driver;
private static String url;
private static String user;
private static String password;
static {
// 在這里讀取屬性配置文件,給靜態(tài)變量賦值
ResourceBundle bundle = ResourceBundle.getBundle("com.study.jdbc.jdbc");
driver = bundle.getString("driver");
url = bundle.getString("url");
user = bundle.getString("user");
password = bundle.getString("password");
// 在類加載的時(shí)候 注冊(cè)驅(qū)動(dòng),對(duì)于整個(gè)應(yīng)用程序來(lái)說(shuō),注冊(cè)驅(qū)動(dòng)只需要做一次即可,所以選擇靜態(tài)代碼塊
// 靜態(tài)代碼塊在類加載時(shí)執(zhí)行, 并且只執(zhí)行一次
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
/*
* 獲取數(shù)據(jù)庫(kù)連接對(duì)象
* */
public static Connection getConnection() throws SQLException {
Connection conn = DriverManager.getConnection(url,user,password);
return conn;
}
/**
* 釋放連接資源
* @param conn 連接對(duì)象
* @param stmt 數(shù)據(jù)庫(kù)操作對(duì)象
* @param rs 結(jié)果集對(duì)象
*/
public static void close(Connection conn, Statement stmt, ResultSet rs){
// 確保在程序結(jié)束時(shí)關(guān)閉數(shù)據(jù)庫(kù)連接
if (rs != null) {
try {
// 關(guān)閉數(shù)據(jù)庫(kù)連接
conn.close();
} catch (SQLException e) {
// 處理關(guān)閉連接時(shí)可能發(fā)生的 SQL 異常
throw new RuntimeException(e);
}
}
if (stmt != null) {
try {
// 關(guān)閉數(shù)據(jù)庫(kù)連接
conn.close();
} catch (SQLException e) {
// 處理關(guān)閉連接時(shí)可能發(fā)生的 SQL 異常
throw new RuntimeException(e);
}
}
if (conn != null) {
try {
// 關(guān)閉數(shù)據(jù)庫(kù)連接
conn.close();
} catch (SQLException e) {
// 處理關(guān)閉連接時(shí)可能發(fā)生的 SQL 異常
throw new RuntimeException(e);
}
}
}
}
3.使用工具類的簡(jiǎn)單示例代碼:
package com.study.jdbc;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class JDBC_actionMod {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps = null;
try {
// 1. 注冊(cè)驅(qū)動(dòng)
// 2. 獲取連接
conn = DBUtil.getConnection(); // TODO 通過(guò)工具類獲取連接
// 3.獲取預(yù)編譯的數(shù)據(jù)庫(kù)操作對(duì)象
String sql = "update emp set ename=?, job=?,sal=? where empno=?";
ps = conn.prepareStatement(sql);
ps.setString(1, "李四修改2");
ps.setString(2, "產(chǎn)品經(jīng)理");
ps.setDouble(3, 5000.0);
ps.setInt(4, 12);
// 4. 執(zhí)行sql語(yǔ)句
int count = ps.executeUpdate();
// 5. 處理結(jié)果
System.out.println("修改了" + count + "條記錄");
} catch (SQLException e) {
throw new RuntimeException(e);
}finally {
// 6.釋放資源
DBUtil.close(conn,ps, null); // TODO 通過(guò)工具類關(guān)閉資源
}
}
}