2014-07-04 36 views
0

這裏是我的Java代碼:如何使用while循環從結果集中獲取的值更新另一個操作?

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循環。請幫我解決這個問題。提前致謝。

+0

爲什麼你不使用單個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其中active_flag = 1和updated_at <= NOW() - INTERVAL 3 MINUTE)'? –

+0

錯誤1093(HY000):您無法在FROM子句中指定目標表'tbl_driver'進行更新 – jasim

+0

我無法在您的查詢或我的示例查詢中看到'tbl_driver'別名。您可能需要查看[this](http://stackoverflow.com/questions/13188002/error-1093-hy000-you-cant-specify-target-table-a-for-update-in-from-clause) –

回答

0

只需重寫更新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 
) 
+0

我需要爲表 – jasim

+0

中的具有特定Id的列「UPDATE table_name SET active_flag = NULL」錯誤1093(HY000):您無法在FROM子句中指定目標表'tbl_driver'進行更新 – jasim

+0

什麼是tbl_driver? – Arion

相關問題