1. 程式人生 > 實用技巧 >JDBC工具類

JDBC工具類

JDBC工具類

目的:簡化書寫

分析:

  1. 註冊驅動

  2. 抽取一個方法獲取連線物件

    • 需求:不想傳遞引數(麻煩),還要保證工具類的通用性。
    • 解決:配置檔案
    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));
    
  3. 抽取一個方法釋放資源

練習:

需求:

  1. 通過鍵盤錄入使用者名稱和密碼
  2. 判斷使用者是否登入成功
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;
    }
}