2013-04-22 88 views
-1

我沒有得到如何解決這個例外。值java.sql.SQLException:用盡結果集

我傳遞ResultSet對象中的每個thread.and做一些邏輯

我的示例程序是:

public class dataimport 

{ 

    public dataimport() 

      { 

     connect(); /*connect to database 


     } 

private void connect() 

{ 

try 
    { 

     /* connected data base 

     str="SELECT * FROM tablename where rownum<=5"; 


      rs1 = statement.executeQuery(str); 

      while (rs1.next()) 
      { 

        Runnable r = new MyThreadClass(rs1); 

             System.out.println(new Thread().getName()); 

             new Thread(r).start(); 


      }    
} 

Thread類

class MyThreadClass implements Runnable 

{ 

public MyThreadClass(ResultSet rs1) 
    { 


    rs2=rs1; 

    } 


public void run() 
    { 

      int i=1; 

       try 

        {   

         while (rs2.next()) 

       { 

           date=rs2.getString("mydate"); 

           System.out.println("mydate="+date); 

           } 

     } 
    catch (Exception ex) 
     { 
      ex.printStackTrace(); 
     } 


} 

} 

如果我添加而(rs2.next在線程類()),也不會有例外,但指明MyDate它將

只打印TW o幾條記錄的見解。

請任何一個可以幫助我在此。

謝謝你提前

+0

同時處理結果集有多少個線程? – 2013-04-22 10:34:02

+1

你想用這段代碼實現什麼?你產生了幾個線程,它們都是相互競爭的,並且遍歷相同的結果集。 – Perception 2013-04-22 10:39:26

回答

0

沒辦法。您正在收到併發錯誤。

你得到N個結果 - >啓動N個線程。在每個線程中,您再次循環結果集上的。它沒有什麼意義,更糟糕的是,一個線程可能會檢查rs.next是否爲真,進入迭代,被完成結果集數據的另一個線程掛起,並且在恢復時嘗試從沒有數據的結果集中讀取數據。

最簡單的(不改變機制)解決方案,將投入線程主循環同步環,但是這將導致大規模的僵局,所以你將用相同的性能,因爲沒有線程結束。至於你的代碼,我認爲你真正想要的是,在主循環中,將所有結果提取到數據結構中,並將該數據結構傳遞給每個線程,以便它可以直接處理它(並且不會傳遞導致此類問題的共享結果集對象)。

+0

謝謝你,這是散列表的最佳數據結構? – user2018083 2013-04-22 11:04:56

相關問題