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 跟踪语句状态的布尔值。这当然是特定于驱动程序的,但如果有任何驱动程序以不太有效的方式实现它,我会感到惊讶。
我最初通过
定义了一个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 跟踪语句状态的布尔值。这当然是特定于驱动程序的,但如果有任何驱动程序以不太有效的方式实现它,我会感到惊讶。