结果集和语句未在java中关闭的效果

use*_*306 1 java multithreading jdbc

我有一个java应用程序,其中线程是套接字连接,它捕获数据并通过放入队列使用生产者和消费者概念传递给另一个线程进行数据处理.问题是数据库处理线程有时无法运行,我注意到有一些结果集和语句尚未关闭.这可能是它失败的原因,还是有其他原因.我怎么知道它失败了是使用isAlive方法来检查数据库处理线程,它显示没有值意味着死亡.

我的代码片段.

private LinkedBlockingQueue<String> databaseQueue = new LinkedBlockingQueue<String>();
class DatabaseProcessor implements Runnable {
  public void run()
      {
      try 
      {
           createConnection();
           while (true) 
             {
                     message = databaseQueue.take();
                     //all the database processing here with multiple queries and resultsets 
             }
       }
       catch (Exception e) 
       {
        e.printStackTrace(System.out);
        try 
        {    
        dbconn.rollback();  
        } 
        catch (Exception rollback) 
        {    
            rollback.printStackTrace(System.out);
        }           
       }

     }
 }
Run Code Online (Sandbox Code Playgroud)

duf*_*ymo 5

谁知道你没有看到你的所有代码?

未能关闭各种稀缺资源,而不仅仅是与数据库相关的资源,最终表现为疲惫和不可用.与数据库的连接是有限的.结果集是游标,也是有限的.

您应该在创建它们的方法范围内关闭资源.在try块中获取它们并在finally块中关闭它们,包含在各个try/catch块中.