У меня проблема, когда моя программа GUI не показывает ошибки, а также не обновляет jTable с помощью инструкции UPDATE, которую я даю. INSERT и DELETE работают нормально, но это не по какой-то причине.Команда SQL SQL UPDATE не работает
Я использую UCanAccess, поэтому я могу использовать базу данных MSAccess и rs2xml для материалов набора результатов.
Таблица, которую я изменяю, представляет собой таблицу соединений с двумя первичными ключами для director_id и movie_id, которые связаны с отдельными таблицами, поэтому это отношение «многие ко многим».
private void jButtonEditActionPerformed(java.awt.event.ActionEvent evt) {
DefaultTableModel tableModel = (DefaultTableModel) jTableDBView.getModel();
// If there's an issue...
if(error handling snipped out...)
{
}
else
{
runQuery(Integer.parseInt(jTextFieldDirectorID.getText()), Integer.parseInt(jTextFieldMovieID.getText()), "UPDATE");
jTextAreaDBView.append("Updated row: " + (jTableDBView.getSelectedRow() + 1) + " (Director ID: " + jTextFieldDirectorID.getText() + " & Movie ID: " + jTextFieldMovieID.getText() +")\n");
updateDB();
}
Который называет ...
public void runQuery(int movieID, int directorID, String typeOfCommand) throws SQLException
{
Connection conn = DriverManager.getConnection(jdbcURL);
ResultSet rs = null;
PreparedStatement stat = null;
try
{
//snipped insert/delete
else if(typeOfCommand.equals("UPDATE"))
{
stat = conn.prepareStatement("UPDATE Movie_Directors SET director_id = ?, movie_id = ? WHERE (director_id = ?) AND (movie_id = ?)");
stat.setInt(1, directorID);
stat.setInt(2, movieID);
stat.setInt(3, directorID);
stat.setInt(4, movieID);
int result = stat.executeUpdate();
}
И
private void updateDB()
{
try
{
Connection conn = DriverManager.getConnection(jdbcURL);
PreparedStatement pst = conn.prepareStatement(query);
Class.forName(driver);
ResultSet rs = pst.executeQuery();
jTableDBView.setModel(DbUtils.resultSetToTableModel(rs)); // Imported lib function
conn.close();
pst.close();
rs.close();
}
catch (Exception ex)
{
// Add a window here
}
}
UPDATE - Исправлен блок runQuery с этим: я добавил 2 новых JTextFields для ввода новых данных и I понять, как все это работает сейчас. Спасибо @jan
int result;
int newDirectorID = Integer.parseInt(jTextFieldNewDirectorID.getText());
int newMovieID = Integer.parseInt(jTextFieldNewMovieID.getText());
stat = conn.prepareStatement("UPDATE Movie_Directors SET director_id = ?, movie_id = ? WHERE director_id = ? AND movie_id = ?");
stat.setInt(1, newDirectorID);
stat.setInt(2, newMovieID);
stat.setInt(3, directorID);
stat.setInt(4, movieID);
result = stat.executeUpdate();
Вы также можете удалить круглые скобки, WHERE director_id =? И movie_id =? –