java.sql.SQLException:已用尽的Resultset

时间:2013-04-22 10:32:39

标签: java multithreading

我没有得到如何解决此异常。

我将Resultset对象传递给每个线程并执行一些逻辑

我的示例程序是:

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();


            }               
}

线程类

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();
        }


}

}

如果我在线程类中添加while(rs2.next()),则不会有异常,但是mydate会

只打印几条记录的两个见解。

请任何人帮助我。

提前谢谢

1 个答案:

答案 0 :(得分:0)

没办法。您遇到了并发错误。

你得到N个结果 - &gt;开始N个线程。在每个帖子中,你再次循环在结果集上。它没有多大意义,更糟糕的是,一个线程检查rs.next是否为真,输入迭代,由另一个完成结果集数据的线程挂起,并在恢复时尝试从中读取数据结果集没有数据。

最简单的(不改变机制)解决方案是将线程主循环放在同步循环中,但这将导致大量死锁,因此您将以无线程的相同性能结束。

至于你的代码,我认为你真正想要的是,在主循环中,将所有结果提取到数据结构中,并将该数据结构传递给每个线程,以便它可以直接处理它(并且没有传递导致此类问题的共享结果集对象。)