【发布时间】:2014-08-25 15:33:07
【问题描述】:
这是我的java代码:
public int function(String name)
{
int i=0;
int id=0;
try
{
String get_id="SELECT id FROM table_name JOIN tbl_2 ON tbl_name.pk_id = tbl_2.fk_name_id where active_flag=1 and updated_at <= NOW() - INTERVAL 3 MINUTE";
Statement stmt=(Statement) conn.createStatement();
ResultSet rs = stmt.executeQuery(get_id);
while (rs.next())
{
id= rs.getInt("id");
String update="UPDATE table_name SET active_flag=NULL WHERE id="+id+"";
stmt.executeUpdate(update);
}
i=1;
}
catch(Exception e)
{
System.out.println(e);
}
return i;
}
运行此程序时,我收到 SQL 异常:
java.sql.SQLException: ResultSet 关闭后不允许操作
请帮助我以另一种简单的方式执行此操作。我只想用从第一个 SQL 查询中获得的值更新同一个表,因为其中有 n 个值 表和值动态变化,我使用了while循环。请帮我解决这个问题。提前致谢。
【问题讨论】:
-
为什么不使用单条sql查询
UPDATE table_name SET active_flag=NULL WHERE id IN (SELECT id FROM table_name JOIN tbl_2 ON tbl_name.pk_id = tbl_2.fk_name_id where active_flag=1 and updated_at <= NOW() - INTERVAL 3 MINUTE)? -
ERROR 1093 (HY000): You can't specify target table 'tbl_driver' for update in FROM 子句
-
我在您的查询或我的示例查询中看不到
tbl_driver别名。您可能需要查看this -
对不起,我在这里使用的表名与我的真实表名不同。其余的都一样
-
其他方法是从结果集中获取数据并将其存储为地图,然后迭代地图并更新表格,但最好的方法是子查询
标签: java mysql for-loop while-loop resultset