Java 使用c3p0记录未关闭的PreparedStatement
使用c3p0,通过设置属性Java 使用c3p0记录未关闭的PreparedStatement,java,c3p0,Java,C3p0,使用c3p0,通过设置属性debugUnreturnedConnectionStackTraces和 未返回的连接超时。我想知道是否有办法找到未关闭的PreparedStatement,因为今天我找到了如下代码: ... ps=dbConnection.prepareStatement(qry); rs=ps.executeQuery(); if(!rsCandItem.next())//to check Result Set has rows { rs.close(); qry = "S
debugUnreturnedConnectionStackTraces
和
未返回的连接超时
。我想知道是否有办法找到未关闭的PreparedStatement
,因为今天我找到了如下代码:
...
ps=dbConnection.prepareStatement(qry);
rs=ps.executeQuery();
if(!rsCandItem.next())//to check Result Set has rows
{
rs.close();
qry = "SELECT * FROM TABLE1";
ps=dbConnection.prepareStatement(qry); //same PreparedStatement object is used without closing previous instance
rs=ps.executeQuery();
}
...
我猜使用相同的
PreparedStatement
object(ps)而不关闭它是错误的/不好的做法,如果我错了,请纠正我。因此,我想使用c3p0(或任何其他方式)未关闭的PreparedStatement
进行日志记录。有什么办法吗?除非驱动程序断开,否则关闭连接也应关闭相关语句和结果集。正如您所说,即使在特定情况下它们可能不会导致问题,也不关闭它们是一种不良做法
由于连接池处理连接(它们是会泄漏资源的连接),因此不太可能存在用于观察其他内容的设置。因此,无法找出现有项目中遵循的此类不良做法。我只需要检查每个代码?您可以尝试findbugs或其他工具,看看它们是否可以识别未关闭的资源。