当前位置: 首页 > 面试题库 >

重用PreparedStatement

鄢博简
2023-03-14
问题内容

我在我们的代码库上运行了findbugs,它指出还有两个语句仍需要关闭。在代码的这一部分中,我们运行:

preparedStatement = connection.prepareStatement(query);

3个不同的查询,重用prepareStatement。在finally块中,我们确实关闭了资源:

finally{
   try{
      if (resultSet != null) 
         resultSet.close();
   } catch (Exception e) {
      exceptionHandler.ignore(e);
   }
   try {
      if (preparedStatement != null) 
         preparedStatement.close();
   } catch(Exception e) {
      exceptionHandler.ignore(e);
   }

应该在下一个连接之前关闭该语句。prepareStatement(query); 还是这个findbug谨慎?


问题答案:

是的,在执行下一个connection.prepareStatement之前必须关闭该语句。否则,您将丢失对未关闭的前一个引用(即泄漏的语句)。在每个语句的使用处使用try
{} finally {}进行包装,并在finally中将其关闭。



 类似资料:
  • 问题内容: 我需要连续运行几个查询 这是前两个ResultSet未正确关闭的问题还是在垃圾回收期间隐式完成? 问题答案: 一旦执行第二个查询,上一个查询就会自动关闭。就您而言,您不必担心。最后,您可以仅此而已。它将自动关闭所有相关对象。 看一下:-文档,其中说:- 当关闭,重新执行或用于从多个结果序列中检索下一个结果时,由该对象生成的Statement对象将自动关闭ResultSet对象。 如果要

  • 问题内容: 我正在开发一个API,其中包含许多相同名称的方法,只是签名不同而已,这在我看来是很普遍的。它们都做相同的事情,不同之处在于,如果用户不想指定默认值,则它们会默认初始化各种值。作为一个容易理解的例子,考虑 所有这些方法执行的基本动作是相同的;森林里种了一棵树。我的API用户需要了解许多重要事项,以了解如何为所有这些方法添加树。 理想情况下,我想编写一个Javadoc块,供所有方法使用:

  • 问题内容: 这个问题已经在这里有了答案 : 8年前关闭。 可能重复: mysql中id(auto_increment列)的碎片 我的数据库中有此列。假设其名称为“ threadid”。它包含赋予每个线程以区别的唯一ID。 线程号9 8 7 6 5 4 3 2 1 假设我已删除ID为5和6的线程。 线程号9 8 7 4 3 2 1 但是,当删除后有一个提交时,给该线程的唯一ID是10。不是5。我认为

  • 我想打印友元重载运算符中的向量值 课堂在这里: 但是当我调用main方法时,它不会编译 这是因为接线员 错误:错误:运算符不匹配 我不想使用for运算符进行迭代,我正在寻找一个智能的解决方案,即复制ostream中的向量内容?

  • 在RxJava中,我有一个对象,其中我订阅了。稍后(在调用后的一段时间)我创建了一个新的并使用之前使用的相同实例进行订阅。但是,这似乎不起作用。订阅者不能重用吗? 示例: 在我的代码中,我想实例化一次,并多次调用,例如在用户单击刷新按钮后...

  • 现在,如果变量'a'在每次执行中都不同,Threadpool以后真的可以重用它吗?我无法真正理解这将如何工作,但我从未见过“ThreadPool重用线程,除了...”,因此产生了困惑。