我最初通过
定义了准备好的声明 prepstmt=conn.prepareStatement("...");
然后在代码的各个部分使用它(通过函数)
prepstmt.setDouble(1,x);
prepstmt.execute();
现在我有时会得到“语句关闭后不允许任何操作。”这是由于底层连接被关闭/超时/重置在代码中的其他地方引起的。
现在很明显我可以尝试/捕获错误然后重置prepstmt,但是这会让“重新运行”查询更加尴尬,所以想知道首先用“
”之类的方法检查是多么“代价高昂” if (prepstmt.isClosed())
prepstmt=conn.prepareStatement("...");
prepstmt.setDouble(1,x);
prepstmt.execute();
即。检查准备好的声明是否在每次使用之前关闭。猜测这一点必然会对性能产生一些影响,但不知道有多重要。估计对于我的特定应用程序,其关闭时间不到0.1%。
答案 0 :(得分:5)
如果您通过PreparedStatements
并且甚至不知道它们是否已关闭,您显然会遇到设计问题。听起来也有资源泄漏。
但是isClosed()
不是一项昂贵的操作,它只返回跟踪语句状态的布尔值。这当然是特定于驱动程序的,但如果任何驱动程序以不太有效的方式实现它,我会感到惊讶。