1. 程式人生 > 實用技巧 >Java學習--JDBC

Java學習--JDBC

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 static
String user; private static String password; private static String driver; /** * 檔案的讀取:只需讀取一次即可拿到資料值。可以使用靜態程式碼塊的方式,隨著類的載入而載入 */ static { // 讀取檔案:BufferReader,FileReader...這裡使用Properties集合類 try { // 1.建立Properties集合類,用來載入jdbc.properties Properties pro = new
Properties(); // 獲取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包

連結:https://i.cnblogs.com/files