java - 结果集和语句未在 Java 中关闭的影响

标签 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);
        }           
       }

     }
 }

最佳答案

谁不看你所有的代码就知道呢?

未能关闭各种稀缺资源,而不仅仅是那些与数据库相关的资源,最终会表现为耗尽和不可用。与数据库的连接是有限的。结果集是游标,也是有限制的。

您应该在创建资源的方法范围内关闭资源。 在 try block 中获取它们,并在 finally block 中关闭它们,包裹在单独的 try/catch block 中。

关于java - 结果集和语句未在 Java 中关闭的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9351173/

相关文章:

java - 无法使用包中的方法将对象存储在 List<Object> 中?

multithreading - 有没有办法限制任务并行库使用的线程?

Java 多线程行为解释

java - 发生异常时关闭数据库连接的最佳设计模式

Java 谷歌语音识别 API

java - 安卓人像锁定相机预览

java - 我需要在同步方法中调用 wait() 和 notify() 吗?

java - Spring Data Redis JedisConnectionException : Unexpected end of stream 错误

java - 如何修复此 Try-With-Resources block 中出现的 "SQLServerException: The connection is closed."问题?

java - 无法使用 JDBC 连接到 Windows 7 上的 MySQL,但可以通过 phpmyadmin 和其他管理工具工作?