2013-04-22 89 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

相关问题