Java PreparedStatements是关闭性能

Rob*_*Rob 0 java prepared-statement

我最初定义了一份准备好的声明

          prepstmt=conn.prepareStatement("...");
Run Code Online (Sandbox Code Playgroud)

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

   prepstmt.setDouble(1,x);
   prepstmt.execute();
Run Code Online (Sandbox Code Playgroud)

现在我有时会得到"声明关闭后不允许任何操作." 这是由于代码中其他地方的基础连接被关闭/超时/重置引起的.

现在显然我可以尝试/捕获错误并重置prepstmt然后,但这会使"重新运行"查询更加尴尬,所以想知道首先用类似的东西检查是多么"昂贵"

   if (prepstmt.isClosed())
          prepstmt=conn.prepareStatement("...");
   prepstmt.setDouble(1,x);
   prepstmt.execute();
Run Code Online (Sandbox Code Playgroud)

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

Kay*_*man 5

如果你PreparedStatements四处走动,甚至不知道它们是否关闭,你显然会遇到设计问题.听起来也有资源泄漏.

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