Java學習--JDBC
阿新 • • 發佈:2020-07-27
1. 配置檔案:jdbc.properties
# url:jdbc:mysql:///BDName # user=username # password=password # 驅動:driver=com.mysql.jdbc.Driver url=jdbc:mysql:///ideatest user=root password=cl170127 driver=com.mysql.jdbc.Driver
2. JDBC工具類:JDBCUtils.class
package com.test.utils; import java.io.FileReader; import java.io.IOException;import java.net.URL; import java.sql.*; import java.util.Properties; /** * JDBC工具類: * 1.抽取註冊驅動 * 2.抽取一個方法獲取連線物件 * 3.抽取一個方法釋放資源 * * 工具類特點: * 1.所有方法都是靜態的,方便呼叫 */ public class JDBCUtils { /** * 配置檔案的方式來記錄引數: * jdbc.properties */ private static String url; private staticString user; private static String password; private static String driver; /** * 檔案的讀取:只需讀取一次即可拿到資料值。可以使用靜態程式碼塊的方式,隨著類的載入而載入 */ static { // 讀取檔案:BufferReader,FileReader...這裡使用Properties集合類 try { // 1.建立Properties集合類,用來載入jdbc.properties Properties pro = newProperties(); // 獲取src路徑下的檔案:ClassLoader類載入器 ClassLoader classLoader = JDBCUtils.class.getClassLoader(); URL res = classLoader.getResource("jdbc.properties"); String path = res.getPath(); // System.out.println(path); // /D:/develop/Java/IDEA/IDEWorkspace/200726/out/production/200726_JDBC/jdbc.properties // 2.載入檔案 // 靜態程式碼塊中的異常只能處理不能丟擲,因為拋要藉助方法 pro.load(new FileReader(path)); // 3.獲取資料,賦值:鍵的名稱要跟配置檔案中的名稱一致 url = pro.getProperty("url"); user = pro.getProperty("user"); password = pro.getProperty("password"); driver = pro.getProperty("driver"); // 4.註冊驅動 Class.forName(driver); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } /** * 獲取連線 * @return 連線物件 */ // 靜態方法,方便呼叫 public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url,user,password); } /** * 釋放資源 * @param stmt * @param coon */ public static void close(Statement stmt, Connection coon){ // 先釋放小的,再釋放大的 if (stmt != null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } //兩個不能寫一起,如果第一個錯誤,會進到異常處理裡面,則可能會跳過第二個 if (coon != null){ try { coon.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 釋放資源 * @param stmt * @param coon * @param rs */ public static void close(ResultSet rs, Statement stmt, Connection coon){ // 先釋放小的,再釋放大的 if (rs != null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stmt != null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } //兩個不能寫一起,如果第一個錯誤,會進到異常處理裡面,則可能會跳過第二個 if (coon != null){ try { coon.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
3. 測試類:JDBCDemo.class
package com.test.JDBCDemo; //import com.sun.applet2.preloader.event.PreloaderEvent; import com.test.utils.JDBCUtils; import java.sql.*; import java.util.Scanner; /** * 寫在前面: * 一定要記得匯入驅動jar包!! * * 登入案例 * 需求: * 1.通過鍵盤錄入使用者名稱,密碼 * 2.判斷使用者是否登入成功 * 步驟: * 1.建立資料庫和表:ideaTest-->userTab * 2.建立一個登入方法 */ public class JDBCDemo { public static void main(String[] args) { // 1.鍵盤錄入使用者名稱,密碼 Scanner sc = new Scanner(System.in); System.out.println("請輸入使用者名稱:"); String username = sc.nextLine(); System.out.println("請輸入密碼:"); String password = sc.nextLine(); // 2.呼叫方法 boolean flag = new JDBCDemo().login(username, password); // 3.判斷結果 if (flag){ System.out.println("登陸成功!"); }else { System.out.println("登陸失敗!使用者名稱或密碼錯誤!"); } } /** * 登入方法:使用PreparedStatement實現 * @param username * @param password * @return */ public boolean login(String username, String password){ if (username == null || password == null){ return false; } Connection coon = null; // Statement stmt = null; ResultSet res = null; PreparedStatement pstmt = null; // 1.連線資料庫 try { coon = JDBCUtils.getConnection(); // 2.定義sql語句 String sql = "select * from userTab where username = ? and password = ?"; // 3.獲取執行sql的物件 // stmt = coon.createStatement(); // PreparedStatement 防止sql注入 pstmt = coon.prepareStatement(sql); // 給?賦值 pstmt.setString(1,username); pstmt.setString(2,password); // 4.執行sql // res = stmt.executeQuery(sql); res = pstmt.executeQuery(); // 5.判斷 return res.next(); } catch (SQLException e) { e.printStackTrace(); }finally { JDBCUtils.close(res,pstmt,coon); } return false; } }
4.專案分佈
5.jar包