JDBC工具類
阿新 • • 發佈:2020-12-03
JDBC工具類
目的:簡化書寫
分析:
-
註冊驅動
-
抽取一個方法獲取連線物件
- 需求:不想傳遞引數(麻煩),還要保證工具類的通用性。
- 解決:配置檔案
package JDBC工具類; import javax.xml.transform.Result; import java.io.FileReader; import java.io.IOException; import java.net.URL; import java.sql.*; import java.util.Properties; public class Demo01 { /** * 檔案的讀取,只需要讀取一次即可拿到這些值,可以使用靜態程式碼塊 */ private static String url; private static String user; private static String password; private static String driver; static { //讀取資原始檔,獲取值。 //建立Proerties集合類。 try { Properties pro = new Properties(); //獲取src路徑下的檔案的方式-->ClassLoader 類載入器 ClassLoader classLoader = Demo01.class.getClassLoader(); URL res = classLoader.getResource("jdbc.properties"); String path = res.getPath(); System.out.println(path); 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 | ClassNotFoundException e) { e.printStackTrace(); } } /** *獲取連線 * @return 連線物件 */ public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url,user,password); } /** *釋放資源 * @param rs * @param stmt * @param conn */ public static void close(ResultSet rs,Statement stmt, Connection conn){ if(rs != null){ try { rs.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if(stmt != null){ try { stmt.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if(conn != null){ try { conn.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } } }
動態獲取配置檔案絕對路徑的方法 ClassLoader classLoader = Demo01.class.getClassLoader(); URL res = classLoader.getResource("jdbc.properties"); String path = res.getPath(); pro.load(new FileReader(path));
-
抽取一個方法釋放資源
練習:
需求:
- 通過鍵盤錄入使用者名稱和密碼
- 判斷使用者是否登入成功
package JDBC工具類; import java.sql.*; import java.util.Scanner; public class lianxi { public static void main(String[] args) throws SQLException { //鍵盤錄入,接受使用者名稱和密碼 Scanner sc = new Scanner(System.in); System.out.println("請輸入使用者名稱"); String username = sc.nextLine(); System.out.println("請輸入密碼"); String password = sc.nextLine(); //呼叫方法 boolean flag = new lianxi().login(username,password); //判斷結果 if (flag){ //登入成功 System.out.println("登入成功"); } else { System.out.println("登入失敗"); } } /** * 登入方法 */ public boolean login(String username,String password) throws SQLException { if (username != null && password != null){ return false; } Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = Demo01.getConnection(); String sql = "select * from USER where username = ? and password = ?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1,username); pstmt.setString(2,password); rs = pstmt.executeQuery(); return rs.next(); } catch (SQLException throwables) { throwables.printStackTrace(); } finally { Demo01.close(rs,pstmt,conn); } return false; } }