【问题标题】:how to update another operation with the values obtained from the result set using while loop?如何使用while循环从结果集中获得的值更新另一个操作?
【发布时间】: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 &lt;= 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


【解决方案1】:

只需将更新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
)

【讨论】:

  • 我需要为表中具有特定 ID 的列“更新 table_name SET active_flag=NULL”
  • ERROR 1093 (HY000): You can't specify target table 'tbl_driver' for update in FROM 子句
  • tbl_driver 是我在实际查询中使用的实际表名,而不是 table_name
猜你喜欢
  • 2018-06-25
  • 1970-01-01
  • 2012-04-14
  • 1970-01-01
  • 2021-07-27
  • 2020-04-28
  • 1970-01-01
  • 2021-01-06
  • 2015-12-27
相关资源
最近更新 更多