【資料庫筆記】編寫JDBC的工具類
阿新 • • 發佈:2018-11-05
註冊驅動和資料庫連線是固定操作,何不將這些固定操作封裝成一個類,並且提供靜態方法返回資料庫連線物件,達到程式碼的重複利用:
/* * JDBC的工具類 * 用於註冊驅動,連線資料庫 */ import java.sql.Connection; import java.sql.DriverManager; public class JDBCUtils { private JDBCUtils() { } private static Connection con; /* * 靜態程式碼塊用於初始化類,為類的屬性初始化,每個靜態程式碼塊只會執行一次。 * 由於JVM在載入類時會執行靜態程式碼塊,所以靜態程式碼塊先於主方法執行。 */ static { try { Class.forName("com.mysql.jdbc.Driver");//註冊驅動 String url = "jdbc:mysql://localhost:3306/mydatabase"; String user = "root"; String password = "yuweijun"; con = DriverManager.getConnection(url, user, password); } catch (Exception ex) { throw new RuntimeException(ex + "資料庫連線失敗!"); } } /* * 定義靜態方法,返回資料庫連線物件 */ public static Connection getConnection() { return con; } }
但是由於我們要考慮程式碼的封裝性,當我們更換資料庫時不應該去改動原始碼,此時我們應該建立配置檔案,配置檔案中以鍵值對的形式寫入我們的資訊,然後在工具類中載入配置檔案,用配置檔案資訊去連線資料庫:
import java.io.FileInputStream; import java.sql.Connection; import java.sql.DriverManager; import java.util.Properties; /* * JDBC工具類 * 讀取配置檔案註冊驅動和連線資料庫 */ public class JDBCUtilsConfig { //私有化構造方法,使類不能被例項化 private JDBCUtilsConfig() {} private static Connection con; static { try { FileInputStream fis = new FileInputStream("src\\MyDataBase.properties"); Properties pro = new Properties(); pro.load(fis); // 通過鍵獲取值 String calss = pro.getProperty("dirverClass"); String url = pro.getProperty("url"); String username = pro.getProperty("username"); String password = pro.getProperty("password"); // 註冊驅動 Class.forName(calss); // 連線資料庫 con = DriverManager.getConnection(url, username, password); } catch (Exception ex) { throw new RuntimeException(ex + "資料庫連線失敗!"); } } // 返回資料庫連線物件 public static Connection getConnection() { return con; } }
測試類:
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import JDBCUtils.JDBCUtils; import JDBCUtils.JDBCUtilsConfig; public class Test { public static void main(String[] args) throws SQLException { // 呼叫JDBC工具類,獲得資料庫連線物件 // Connection con=JDBCUtils.getConnection(); Connection con = JDBCUtilsConfig.getConnection(); // 查詢賬務的全部資訊 String sql = "select * from zhangwu"; // 獲得SQL語句執行物件,並執行預編譯 PreparedStatement ps = con.prepareStatement(sql); // 執行查詢語言,獲得結果集 ResultSet rs = ps.executeQuery(); while (rs.next()) { System.out.println(rs.getInt("id") + " " + rs.getString("zname") + " " + rs.getInt("money")); } } }
後面我們可以往工具類中實現更多功能,比如增刪改查等等,方便我們的使用。