0
public void deleteBook(int temp)
{
    try
    {
        query = "DELETE FROM ccItems WHERE ISBN = '"+temp+"'";

        stmt.executeUpdate(query);

        JOptionPane.showMessageDialog(null, "Item Deleted !");
    }      

    catch(Exception e)
    {
        JOptionPane.showMessageDialog(null, "Error: Could not find ISBN or Already deleted.");
    }
}

deleteBook()データベース内のアイテムを削除する方法があります。対応するISBNが入力された指定されたアイテムを削除することを意味し、適切に機能します。問題は、ユーザーがデータベースにないISBN を入力すると、tryステートメントがまだ実行されることです。catch入力されたISBNがデータベースに見つからないため、ステートメントを実行する必要があると思います。

4

5 に答える 5

0

まったくエラーではないデータベースの観点からは、 where 条件が指定された場合、一致するレコードが見つかりませんでした。そのため、クライアントで例外がスローされません。

于 2013-03-16T06:55:08.493 に答える
0

temp を ' または ''=' に等しくするために何かを入力すると、すべての ccItems が削除されます。これは SQL インジェクション攻撃です。

于 2013-03-16T06:55:36.897 に答える
0

ISBN が存在しない場合、エラーなしでゼロ行に影響するため、エラーは発生しません。

行が削除されたかどうかを正確に知りたい場合は、次のようにコードを記述します。

public void deleteBook(int temp){
   try{
        query = "DELETE FROM ccItems WHERE ISBN = '"+temp+"'";
        int numberOfRowsEffected = stmt.executeUpdate(query);
        if (numberOfRowsEffected == 0){
            JOptionPane.showMessageDialog(null, "Item not found !");
        }else{
            JOptionPane.showMessageDialog(null, "Item Deleted !");
        }
    } catch(Exception e){
        JOptionPane.showMessageDialog(null, "Error: Could not find ISBN or Already deleted.");
    }
}
于 2013-03-16T06:56:11.993 に答える
0

試行は引き続き実行されます。0行を削除するだけです。

executeUpdate()の戻り値を使用する必要があります。executeUpdate() は int を返すため。更新または削除されたエンティティの数は、問題の解決に使用できます。エラーメッセージを取得するには、例外をスローするだけです。

public void deleteBook(int temp)
{
    try
    {
        query = "DELETE FROM ccItems WHERE ISBN = '"+temp+"'";
        if (stmt.executeUpdate(query)!=0) {
          JOptionPane.showMessageDialog(null, "Item Deleted !");
        } else {
          throw new Exception();
        }
    }      
    catch(Exception e)
    {
        JOptionPane.showMessageDialog(null, "Error: Could not find ISBN or Already deleted.");
    }
}
于 2013-03-16T06:53:48.457 に答える
0

選択クエリと同様に、「レコードが見つかりません」も例外ではありません。stmt.executeUpdate(query);削除されたレコードの数を返します。

于 2013-03-16T06:53:53.540 に答える