2012-03-08 14 views
2

私はJavaプログラムからMySQLデータベースのレコードを削除するコードを書いています。コンパイルして正常に実行しますが、レコードはデータベースに残ります。助言がありますか?PreparedStatement Javaでの削除

JButton btnDelete = new JButton("Delete"); 
btnDelete.addActionListener(new ActionListener() { 

    public void actionPerformed(ActionEvent arg0) { 

     try { 

      Object[] options = {"Yes", "No"}; 
      Component form = null; 
      int n = JOptionPane.showOptionDialog(form, "Do you like to delete the record for Student ID: " + 
        textField_16.getText() + " ?", "Exit Confirmation", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options); 

      if(n == JOptionPane.YES_OPTION) { 

       String mock = textField_16.getText(); 

       String sql = "DELETE FROM mockexam WHERE MockID =?"; 
       PreparedStatement prest = con.prepareStatement(sql); 
       prest.setString(1, mock); 
       int val = prest.executeUpdate(); 
       JOptionPane.showMessageDialog(frmDeleteMock, "The record has been deleted successfully."); 
      } 
     } 
     catch (SQLException e) { 
      e.printStackTrace(); 
      JOptionPane.showMessageDialog(frmDeleteMock, "Record couldn't be deleted. Please try again."); 
     }  
    } 
}); 

btnDelete.setBounds(45, 235, 89, 23); 
panel_1.add(btnDelete); 
+0

executeUpdateは、updatetがどのくらいの量であったかを示すintを返し、その値を取得してチェックします。 – oers

+0

'int val = prest.executeUpdate();'をチェックし、それが返す値を確認してください。あなたが見つかると分かるならば。 –

+0

レコードのキーは実際に 'MockID'ですか? DBから削除するレコードが見つからない場合は、deleteを実行してもエラーは発生しません。 – Perception

答えて

2
prest.setString(1, "MockID"); 

あなたはMockIDに等しいMockIDを探している私は、あなたが特定のIDを使用してエントリを削除すると仮定します。

String mockID = "2"; //Set this however you want to set it. 
prest.setString(1, mockID); 
int val = prest.executeUpdate(); 
//Check val for what happened. 
+0

こんにちは@ twain249 - 私はあまりにも確信していない、正確に何を意味ですか?私は何を変更する必要がありますか?それはなぜですか?String mockID = "2"; ?後で使用される2はどこですか? – Pita

+0

私はちょうど例として2を使用しました。この数字は、あなたが削除したいmockIDとなります。 – twain249

+0

私はあなたに私が変更を要求したときに私のコードを修正しました。データベースの行をまだ削除していません。 – Pita

0

レコードがあなたの基準に一致しない場合、SQLがします働いたとみなされる。したがって、私はそのパラメータを疑っているだろう。データベースの列のタイプは何ですか?それは固定長の値で、 "MockID"に一致しませんか?

+0

レコードが一致しない場合は、エラーメッセージが表示されます。 – Pita

3

あなたは(InnoDBテーブルまたはMyISAMテーブルなど)に対して実行されているDBの種類を示すものではありませんが、あなたはInnoDBテーブルに対して実行している場合、あなたはあなたのexecuteUpdate()後にトランザクションをコミットするcommit()文を持っている必要があります。トランザクションがロールバックされたことを示すログがある可能性があります。

try { 
    Object[] options = {"Yes", "No"}; 
    Component form = null; 
    int n = JOptionPane.showOptionDialog(form, 
      "Do you like to delete the record for Student ID: " + textField_16.getText() + " ?", 
      "Exit Confirmation", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options); 

    if(n == JOptionPane.YES_OPTION) { 
     String sql = "DELETE FROM mockexam WHERE MockID =?"; 
     PreparedStatement prest = con.prepareStatement(sql); 
     prest.setString(1, "MockID"); 
     prest.executeUpdate(); 
     con.commit(); 
     JOptionPane.showMessageDialog(frmDeleteMock, "The record has been deleted successfully."); 
    } 
} 

catch (SQLException e) { 
    e.printStackTrace(); 
    JOptionPane.showMessageDialog(frmDeleteMock, "Record couldn't be deleted. Please try again."); 
} 

また、あなたは、コード内の任意の漏れがないことを確認するために、接続にfinally{}ブロック内のPreparedStatement close()呼び出しを逃しています。