Java PreparedStatements isClosed 性能

Java PreparedStatements isClosed performance

我最初通过

定义了一个Prepared Statement
          prepstmt=conn.prepareStatement("...");

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

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

现在我有时会得到 "No operations are allowed after statement closed.",这是由代码中其他地方的基础连接 closed/timed out/reset 引起的。

现在显然我可以 try/catch 错误然后重置 prepstmt,但这会使 "rerunning" 查询更加尴尬,所以想知道 "costly" 如何进行检查首先是

   if (prepstmt.isClosed())
          prepstmt=conn.prepareStatement("...");
   prepstmt.setDouble(1,x);
   prepstmt.execute();

即在 每次 使用它之前检查 Prepared Statement 是否关闭。猜测这一定会对性能产生一些影响,但不知道有多大。估计对于我的特定应用程序,它关闭的时间少于 0.1%。

如果你路过 PreparedStatements 并且甚至不知道它们是否关闭,你显然有设计问题。听起来也可能存在资源泄漏。

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