我遇到了下面的Java代码问题。它应该更新给出ID的表中的某些记录,以及STATUS
列为'good'的位置(在任何给定时间这只是一行)。但是,当我运行下面的代码时,它似乎忽略了AND STATUS = 'good'
部分,并在NUMRECS
匹配的任何地方更新了所有ID
。
static void insertNumRecs()
{
PreparedStatement insert = null;
try
{
String insertNumRecsCommand = "UPDATE FILESTATUS SET NUMRECS = ? " +
"WHERE ID = ? AND STATUS = 'good'";
insert = Main.con.prepareStatement(insertNumRecsCommand);
insert.setInt(1, Main.numRecs);
insert.setString(2, Main.docID);
insert.executeUpdate();
}
catch (Exception ex) {ex.printStackTrace();}
finally {close(null, insert);}
}
我到处尝试搜索这个,但我找不到任何答案。当我直接从数据库运行命令时,它工作正常,这让我更加困惑。
提前致谢。
答案 0 :(得分:2)
尝试写
"WHERE ID = ? AND STATUS = ?"
并使用
insert.setString(3, "good");
答案 1 :(得分:2)
这并不能解释问题,但我想知道你为什么不这样做:
static void insertNumRecs()
{
PreparedStatement insert = null;
try
{
String insertNumRecsCommand = "UPDATE FILESTATUS SET NUMRECS = ? " +
"WHERE ID = ? AND STATUS = ?";
insert = Main.con.prepareStatement(insertNumRecsCommand);
insert.setInt(1, Main.numRecs);
insert.setString(2, Main.docID);
insert.setString(3, "good");
insert.executeUpdate();
}
catch (Exception ex) {ex.printStackTrace();}
finally {close(null, insert);}
}
看不到您的数据,所以我无法判断是否是一个案例问题(“好”!=“好”)
您确定要连接到您认为自己的数据库吗?如果连接字符串指向一个数据库,并且您对另一个数据库运行测试,则可以解释您没有看到更改的原因。