1. 程式人生 > >JDBC 入門介紹以及 DAO 模式簡單介紹

JDBC 入門介紹以及 DAO 模式簡單介紹

JDBC(Java Database Connectivity) 使用步驟

  1. 下載 JDBC 相應資料庫的 jar 包加入專案下的 lib 資料夾中
    此處使用 mysql,對應 mysql 的 jar 包下載地址:
    mysql-connector-java-8.0.13.jar
  2. 建立一個專門用作操作資料庫操作的類 DBUtils,下面示例在 DBUtils 中寫一個查詢本地的資料庫 student 中一個叫 student 的表中的所有記錄
  3. 基本步驟
    a. 註冊資料庫驅動
    b. 獲取連線 Connection 物件
    c. 建立 Statement 物件
    d. statement
    物件執行 SQL 語句得到 ResultSet
    e. 遍歷得到的 ResultSet 得到結果
  4. 完整程式碼及註釋
    import org.junit.Test;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.sql.*;
    import java.util.Properties;
    	
    public class DBUtils {
    
        @Test
        public void findAll() throws IOException, ClassNotFoundException {
    Connection connection = null; Statement statement = null; ResultSet rs = null; // 通過 Properties 物件或許建立 Connection 物件需要的引數的值 Properties properties = new Properties(); properties.load(new FileInputStream(new File("jdbc.properties"))); // 註冊驅動,似乎現在是可以省略的,獲取 Connection 物件時會自動註冊
    Class.forName(properties.getProperty("driver")); try { // 獲取資料庫 url,此處為 "jdbc:mysql://localhost/student", 最後一個 student 是在本地資料庫上的一個數據庫名 String url = properties.getProperty("url"); String user = properties.getProperty("user"); String password = properties.getProperty("password"); connection = DriverManager.getConnection(url, user, password); statement = connection.createStatement(); // 需要執行的 SQL 語句,此處是查詢操作,根據需要編寫不同語句 String query = "SELECT * FROM student"; // 查詢語句對應的方法是 executeQuery 方法,另如 update 操作對應的則是 executeUpdate 方法 // 不同的方法返回的 rs 物件也不同,基本通過打一下 . 這個符號就知道該怎麼操作了 rs = statement.executeQuery(query); // 此處只是對查詢到的記錄做了簡單的列印處理 while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("stu_name"); int age = rs.getInt("age"); System.out.println("Id: " + id + ", Name: " + name + ", Age: " + age + "."); } } catch (SQLException e) { e.printStackTrace(); } finally { // finally 中關閉資源 if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (statement != null) { try { statement.close(); } catch (SQLException e) { e.printStackTrace(); } } if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }

DAO(Data Access Object) 模式簡單介紹

DAO 即一個用於資料庫操作的物件
實現步驟:

  1. 新建一個 dao 介面,宣告資料庫訪問規則(一系列與資料庫操作直接相關的,對資料庫進行更新、查詢、刪除、修改等操作的方法)
  2. 新建一個 dao 實現類,具體實現 dao 介面中定義的方法
  3. 新建一個 dao 實現類物件,直接使用其中的方法與資料庫互動

Statement 的安全問題,PreparedStatement

Statement 執行是先拼接 sql 語句後執行的,以前易存在“注入攻擊”的問題,因此現在用 PreparedStatementPreparedStatement 會在執行前做語法規則校驗。

PreparedStatement 使用介紹:
Statement 物件是在寫好 sql 語句的字串後執行;
PreparedStatement 不將 sql 語句的引數直接拼接成 sql 語句的字串,而是建立了 PreparedStatement 物件後通過 set…() 等方法傳入 (…處為引數對應資料型別)
程式碼例項:

String sql = "SELECT * FROM user WHERE username=? AND password=?";
// 如果用 Statement,上述對應的 sql 語句中的問號則會直接換成實際的值
PreparedStatement ps = connection.preparedStatement(sql);
// 沒錯,下標從 1 開始,1 表示在第 1 個 ? 的位置插入 username 的值
ps.setString(1, username);
ps.setString(2, password);
// 若是新增、更新、刪除操作則使用 executeUpdate() 方法
ps.executeQuery();