2012-03-08 3 views
2

Я написал код для удаления записи в базе данных MySQL из моей программы Java. Он компилирует и запускает его успешно, но запись все еще находится в базе данных. Какие-либо предложения?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 возвращает int, в котором указывается, сколько было updatet, получить это значение и проверить его. – oers

+0

Проверьте значение 'int val = prest.executeUpdate();' и посмотрите, какое значение оно возвращает. Если вы увидите, что узнаете. –

+0

Является ли ключ для вашей записи фактически «MockID»? Обратите внимание, что выполнение удаления не будет вызывать ошибку, если она не находит запись для удаления из БД. – 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

Hi @ twain249 - Я не уверен, что вы имеете в виду? что мне нужно изменить? и почему это String mockID = "2"; ? где 2 используется позже? – Pita

+0

Я просто использовал 2, как пример, этот номер будет любым mockID, который вы хотите удалить. – twain249

+0

Я изменил свое сообщение с кодом, как вы просили меня изменить. однако он все еще не удаляет строку в базе данных. – Pita

0

Если записи не соответствуют вашим критериям, то SQL будет считаются выполненными. Поэтому я был бы подозрительным к параметру. Каков тип столбца в базе данных? Может ли оно быть фиксированным значением длины и поэтому не соответствовать «MockID»?

+0

Если он не соответствует никаким записям, он выдает сообщение об ошибке. – Pita

3

Вы не указывают, какой БД вы работаете против (InnoDB или MyISAM, и т.д.), но если вы работаете с InnoDB, вы должны иметь commit() заявление на совершение сделки после executeUpdate(). Скорее всего, у вас есть что-то в вашем журнале, что указывает на то, что ваша транзакция отменена.

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."); 
} 

Вы также отсутствует подключение к PreparedStatement close() вызовы в finally{} блоке, чтобы убедиться, что у вас нет каких-либо утечек в вашем коде.

Смежные вопросы