我有一个 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/