java - 如何使用 while 循环使用从结果集中获取的值来更新另一个操作?

标签 java mysql for-loop while-loop resultset

这是我的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: Operation not allowed after ResultSet closed

<小时/>

请帮助我以另一种简单的方式执行此操作。我只想用从第一个 SQL 查询获得的值更新同一个表,因为中有 n 个值 表和值动态变化,我使用了 while 循环。请帮我解决这个问题。提前致谢。

最佳答案

只需将更新sql语句重写为:

UPDATE table_name 
SET active_flag=NULL 
WHERE EXISTS
(
    SELECT 
        NULL 
    FROM 
        table_name as tbl
        JOIN tbl_2 
            ON tbl_name.pk_id = tbl_2.fk_name_id 
        where tbl.active_flag=1 
        and tbl.updated_at <= NOW() - INTERVAL 3 MINUTE
        AND tbl.id=table_name.id
)

关于java - 如何使用 while 循环使用从结果集中获取的值来更新另一个操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24571839/

相关文章:

mysql - 数据库架构

java - 如何在 Java EE 和 Spring Boot 中热重载属性?

java - 在java中按字典(字母)顺序排序

php - MySQL查询以获取选定行周围的行

mysql - 使用 MySQL 连接四个表并从其中两个获取值

javascript - for() 循环比较两个数组,然后更改另一个数组。仅 JavaScript

java - 按回车键时程序不会继续。我该如何解决这个错误?

java - wsimport 忘记了一个代理类

c - 运行代码恰好一秒钟

python - 计算列表元素中字符串的出现次数?