JDBC系列(五):JDBC利用PrepareStatement實現鍵盤輸入信息的數據庫增、刪、改

1. Statement在字符串拼接(變量使用)時顯現弊端

使用變量時(涉及拼接字符串):Statement表達比較麻煩,我們用PrepareStatement來替代

之所以使用到PrepareStatement來處理鍵盤獲取輸入信息,是因爲Statement暴露了弊端–字符串拼接的問題
在這裏插入圖片描述

舉個例子:

  • 從鍵盤輸入姓名: 張三丰 (程序中變量設爲stuname)

  • 從鍵盤輸入年齡:78 (程序中變量設爲age)

使用Statement的場景:

String sql = "INSERT  INTO stu_info VALUES ('"+stuname+"',"+age+");";

大家可以看到,

  • 當變量爲字符串時:’ ’ 、" "、+ + ,同時用於變量表達,

  • 當變量爲數字時:" "、+ + ,同時用於變量表達。

​ 不說其他的,換做是你,你想使用這種表達方式嗎?你比較熟悉還好,上來就可以寫,但是如果你不熟悉怎麼辦?寫一次,百度一次?是不是很麻煩?這種表達確實麻煩,這也是Statement在處理這個問題時的弊端所在

2. PrepareStatement提供良好字符串拼接(變量使用)方案

果真,物競天擇,適者生存。哪個好用,我們就用哪個。

下面我們來說,PrepareStatement在變量引用方面的優勢:

// 增:
String sql="INSERT  INTO stu_info VALUES (?,?);";
//創建PrepareStatement
PreparedStatement pst = conn.prepareStatement(sql);
//把變量賦值給sql語句
pst.setString(1,stuname);  //將鍵盤輸入的stuname,賦值給第1個?問號
pst.setInt(2,age); //將鍵盤輸入的age,賦值給第2個?問號

大家看到這種表達了嗎?

只需要使用setString來告訴我們的sql語句,第幾個問號,表達的是什麼內容即可,就這麼簡潔。

比如:

pst.setString(1,stuname);  //將鍵盤輸入的stuname,賦值給第1個?問號
pst.setInt(2,age); //將鍵盤輸入的age,賦值給第2個?問號

3. 程序對比展示

1. 自行準備jar包,並導入到項目中。
在這裏插入圖片描述
2.程序部分。

import java.sql.*;
import java.util.Scanner;

public class JDBCDemoPrep {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //獲取鍵盤輸入
        Scanner input = new Scanner(System.in);

        System.out.println("請輸入姓名:");
        String stuname = input.next();

        System.out.println("請輸入年齡:");
        int age = input.nextInt();

        //1.註冊驅動
        Class.forName("com.mysql.jdbc.Driver");
        //2.連接數據庫
        String url = "jdbc:mysql://localhost:3306/test";
        Connection conn = DriverManager.getConnection(url,"root","88888888");
        //3.操作數據庫

          /*
           //此爲Statement的寫法:
           //寫法1(Statement只能用此法,也因爲此Statement顯現了第一個弊端--字符串拼接麻煩\使用本地輸入信息比較麻煩、涉及單引號、雙引號、++的組合問題)
               //增:
               //String sql = "INSERT  INTO stu_info VALUES ('"+stuname+"',"+age+");";
               //改:
               //String sql = "UPDATE stu_info SET age = "+age+"  WHERE stuname ='"+stuname+"';";
               //刪:
                 String sql = "DELETE FROM stu_info WHERE stuname ='"+stuname+"';";
               //創建Statement
                 Statement st = conn.createStatement();
               //執行sql語句
                 st.executeUpdate(sql);
                * */


            //PrepareStatement的寫法
            // 增:
            //String sql="INSERT  INTO stu_info VALUES (?,?);";
            //改:
            //String sql = "UPDATE stu_info SET stuname =?  WHERE age = ?;";
            //刪:
            String sql = "DELETE FROM stu_info WHERE stuname =? AND age = ?;";
            //創建PrepareStatement
            PreparedStatement pst = conn.prepareStatement(sql);
            //把變量賦值給sql語句
            pst.setString(1,stuname);  //將鍵盤輸入的stuname,賦值給第1個?問號
            pst.setInt(2,age); //將鍵盤輸入的age,賦值給第2個?問號
            //執行sql
            pst.executeUpdate();

        //4.關閉資源
        conn.close();
        input.close();
        pst.close();
    }
}

4. 程序功能介紹與結果演示

程序功能介紹與結果演示:

  1. 最初數據庫的數據表中爲空。
    在這裏插入圖片描述
  2. PrepareStatement 增
// 增:
String sql="INSERT  INTO stu_info VALUES (?,?);";

鍵盤輸入:
在這裏插入圖片描述
功能解釋:向數據庫test中表【stu_info】中添加人員信息 名:張三丰 年齡: 79 的信息條。

結果展示:
在這裏插入圖片描述


  1. PrepareStatement 改
//改:
String sql = "UPDATE stu_info SET stuname =?  WHERE age = ?;";

鍵盤輸入:
在這裏插入圖片描述
功能解釋:修改數據庫test中表【stu_info】中添加人員信息名:年齡爲 79的人員的姓名 改爲 張無忌 。

結果展示:

在這裏插入圖片描述
3. PrepareStatement 刪

//刪:
String sql = "DELETE FROM stu_info WHERE stuname =? AND age = ?;";

鍵盤輸入:
在這裏插入圖片描述

功能解釋:刪除數據庫test中表【stu_info】中人員信息 名: 張無忌 年齡 79 的信息。

結果展示:
在這裏插入圖片描述


在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章