gpt4 book ai didi

Java SQL UPDATE 命令不起作用

转载 作者:行者123 更新时间:2023-12-01 10:44:39 26 4
gpt4 key购买 nike

我遇到一个问题,我的 GUI 程序没有显示错误,也没有使用我给出的 UPDATE 语句更新 jTable。 INSERT 和 DELETE 工作正常,但这不是出于某种原因。

我正在使用 UCanAccess,因此我可以使用 MSAccess DB 和 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
}
}

更新 - 修复了 runQuery block :我添加了 2 个新的 jTextFields 来输入新数据,我现在了解了它是如何工作的。谢谢@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();

最佳答案

我可能错了 - 但你的更新没有任何作用。它将(movieId,directorId)分配给已经(movieId,directorId)

的那一行。

因此,如果已经有一行 - 什么也不会发生。如果没有匹配的行 - 也不会发生任何事情。

如果例如电影导演确实在某个时间发生了变化,则更新是有意义的。

在这种情况下,您需要一个变量 newDirectorID 并将其作为新值放入:

        int newDirectorID; // YOU NEED TO PROVIDE A VALUE
stat = conn.prepareStatement("UPDATE Movie_Directors SET director_id = ?, movie_id = ? WHERE director_id = ? AND movie_id = ?");
stat.setInt(1, newDirectorID);
stat.setInt(2, movieID);
stat.setInt(3, directorID);
stat.setInt(4, movieID);

int result = stat.executeUpdate();

这实际上会更改表中的一些数据,因此如果 (directorID, movieID) 之前存在,则更新的行数应为 1。

关于Java SQL UPDATE 命令不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34255198/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com