簡體   English   中英

我應該如何確定數據庫中是否已經存在數據

[英]How should i make sure if the data already exists in the database

我的代碼有一些錯誤,當我寫一個數據庫中不存在的卷號並按下刪除按鈕時,還會彈出一條消息說“記錄已成功刪除”

實際上,我想創建一個學生報告項目,並通過連接 java 和 MySQL。 所以我為刪除按鈕編寫了代碼,如果寫了一個學生的卷號並按下刪除,它將刪除該特定學生的記錄。

所以希望你理解我的問題並期待一個准確的答案。

Class.forName("java.sql.DriverManager");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost/stud","root","");
Statement stmt=con.createStatement();
String query="delete from info where rollno="+rn.getText();
int  d = stmt.executeUpdate(query);
JOptionPane.showMessageDialog(null,"record deleted successfully!!!");
rn.setText("");

首先,使用PreparedStatement填寫參數而不是編寫 SQL 字符串。
可以避免非常討厭的錯誤( “Bobby Tables”XKCD 漫畫中的 SQL 注入如何工作? )。 所以

PreparedStatement stmt = con.prepareStatement("DELETE FROM info WHERE rollno=?");
stmt.setLong(1, Long.parseLong(rn.getText()));
int d = stmt.executeUpdate();

就您的問題而言:
方法executeUpdate返回受影響的行數。
如果它等於 0,則不刪除任何行。

if (d == 0)
{
  JOptionPane.showMessageDialog(null,"This record does not exist");
  // Return or thrown an exception or whatever to interrupt the operation
}
else
  JOptionPane.showMessageDialog(null,"record deleted successfully!!!");

只有當d變量的值為正數時才應執行showMessageDialog ,即從數據庫中刪除了一些記錄。 例如

Class.forName("java.sql.DriverManager");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost/stud","root","");
Statement stmt=con.createStatement();
String query="delete from info where rollno="+rn.getText();
int  d = stmt.executeUpdate(query);
if(d>0){
    JOptionPane.showMessageDialog(null,"record deleted successfully!!!");
}
rn.setText("");

檢查 executeUpdate 的結果是否 > 0。如果是,則您的條目已被刪除。

輸入 rn: 1 or 1=1並享受。 使用 PreparedStatements 將防止這種邪惡的 SQL 注入。 它還處理 SQL 字符串和 escaping 撇號和其他字符周圍的撇號。

Connection con=DriverManager.getConnection("jdbc:mysql://localhost/stud","root","");
String query="delete from info where rollno=?";
try (PreparedStatement stmt = con.prepareStatement(query)) {
    stmt.setLong(1, Integer.parseLong(rn.getText()));
    int d = stmt.executeUpdate();
    if (d != 0) {
        JOptionPane.showMessageDialog(null, "Record deleted successfully.",
            JOptionPane.INFORMATION_MESSAGE);
    }
}

這個try-with-resources將確保stmt始終關閉

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM