gpt4 book ai didi

java - UPDATE 后 SELECT 查询的意外行为

转载 作者:行者123 更新时间:2023-11-30 22:09:01 26 4
gpt4 key购买 nike

以下是我的 java 代码中的逻辑:

con.setAutoCommit(false);
int starIndex = 0;
List Details = new ArrayList();

while (true) {
isRsEmpty = true;
String my_Query = "select * from x,y,z where"
+ " x.a = y.b"
+ " x.a = z.c"
+ "y.b = z.e"
+ " ORDER BY a ASC"
+ " limit 5"
+ " offset " + starIndex;


preparedStatement = con.prepareStatement(my_Query);
rs = preparedStatement.executeQuery();

while (rs.next()) {
isRsEmpty = false;

//Other processing steps


starIndex++;
Details.add(rs.getInt("id"));
}

if(isRsEmpty){
starIndex = 0;
}


Iterator itr = Details.iterator();
String updateTable = "UPDATE x SET status = ? where i = ? and j = ? and k = ?";
updatePreparedStatement = con.prepareStatement(updateTable);

while (itr.hasNext()) {

updatePreparedStatement.setInt(1, 1);
updatePreparedStatement.setString(2, "zzz");
updatePreparedStatement.setInt(3, 9);
updatePreparedStatement.setInt(4, 10);
updatePreparedStatement.addBatch();


}

updatePreparedStatement.executeBatch();
con.commit();
Details.clear();
}

问题:

我的表中有 13 个条目满足选择查询。

当我第一次运行查询时,我的 Limit 是 5,Offset 是 0,我得到从表中正确选择了 5 条记录,并更新了选定的 5 条记录。

当选择查询再次运行时对表进行更新后,它给了我 3 条记录。这是意外的,因为我在表中还剩下 8 条记录。再次更新了 3 条记录。

再次运行选择查询时,它给了我 0 条记录。

然后再次运行一个选择查询,为我提供 5 条记录并更新这 5 条记录。

我无法理解这种行为。如果我在没有更新的情况下运行我的选择查询,那么它会正确运行,这给了我 5,5,3 条记录,但是根据上面的逻辑,它给了我 5,3,0,5 条记录。

这里有什么问题?

注意:在上面的程序中,所有变量(如 PreparedStatement 和其他变量)都已正确声明。

谢谢

最佳答案

您是否有可能在选择查询的条件之间缺少“and”关键字?

String my_Query = "select * from x,y,z where"
+ " x.a = y.b"
+ " AND x.a = z.c"
+ " AND y.b = z.e"
+ " ORDER BY a ASC"
+ " limit 5"
+ " offset " + starIndex;

我不知道这是否能解决问题,但我觉得它像这样工作很奇怪。

关于java - UPDATE 后 SELECT 查询的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40744030/

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