Java PreparedStatements是关闭性能

时间:2016-04-08 19:23:21

标签: java prepared-statement

我最初通过

定义了准备好的声明
          prepstmt=conn.prepareStatement("...");

然后在代码的各个部分使用它(通过函数)

   prepstmt.setDouble(1,x);
   prepstmt.execute();

现在我有时会得到“语句关闭后不允许任何操作。”这是由于底层连接被关闭/超时/重置在代码中的其他地方引起的。

现在很明显我可以尝试/捕获错误然后重置prepstmt,但是这会让“重新运行”查询更加尴尬,所以想知道首先用“

”之类的方法检查是多么“代价高昂”
   if (prepstmt.isClosed())
          prepstmt=conn.prepareStatement("...");
   prepstmt.setDouble(1,x);
   prepstmt.execute();

即。检查准备好的声明是否在每次使用之前关闭。猜测这一点必然会对性能产生一些影响,但不知道有多重要。估计对于我的特定应用程序,其关闭时间不到0.1%。

1 个答案:

答案 0 :(得分:5)

如果您通过PreparedStatements并且甚至不知道它们是否已关闭,您显然会遇到设计问题。听起来也有资源泄漏。

但是isClosed()不是一项昂贵的操作,它只返回跟踪语句状态的布尔值。这当然是特定于驱动程序的,但如果任何驱动程序以不太有效的方式实现它,我会感到惊讶。