我应该关闭作为参数传递的准备好的语句吗?
Should I close the prepared statement passed as parameter?
我知道我们不应该在 java 中重用准备好的语句或使用 try-with-resource。但是我应该如何处理作为参数传递的准备好的语句呢?我也应该关闭它吗?
例如:
private void somemethod(PreparedStatement pStmt1, PreparedStatement pStmt2 )
{
int nCount = 0;
try
{
pStmt1.setString (1,"something");
pStmt1.setInt(2, 1);
nCount = pStmt1.executeUpdate();
pStmt1.clearParameters();
if (nCount == 0)
{
pStmt2.setInt(1, 1);
pStmt2.setString(2, "something");
pStmt2.executeUpdate();
pStmt2.clearParameters();
}
}
catch (Exception ex)
{
LOGGER.log(e);
}
finally {
//here should I close these parameters of prepared statements?
//Even though I do not close them the sonar is not giving blocker to close them.
//So I am curious to know the reality. Please help. Thank you
pStmt1.close();
pStmt2.close();
}
}
我的看法是这样的:
在您的代码中,somemethod
不是传递给它的那些准备好的语句的所有者。它没有创建它们,因此它不应该对其生命周期负责(比如关闭它们)。
创建它们的代码也应该负责关闭它们。 somemethod
只是“租借”了那些准备好的声明,应该尊重他们。
我知道我们不应该在 java 中重用准备好的语句或使用 try-with-resource。但是我应该如何处理作为参数传递的准备好的语句呢?我也应该关闭它吗?
例如:
private void somemethod(PreparedStatement pStmt1, PreparedStatement pStmt2 )
{
int nCount = 0;
try
{
pStmt1.setString (1,"something");
pStmt1.setInt(2, 1);
nCount = pStmt1.executeUpdate();
pStmt1.clearParameters();
if (nCount == 0)
{
pStmt2.setInt(1, 1);
pStmt2.setString(2, "something");
pStmt2.executeUpdate();
pStmt2.clearParameters();
}
}
catch (Exception ex)
{
LOGGER.log(e);
}
finally {
//here should I close these parameters of prepared statements?
//Even though I do not close them the sonar is not giving blocker to close them.
//So I am curious to know the reality. Please help. Thank you
pStmt1.close();
pStmt2.close();
}
}
我的看法是这样的:
在您的代码中,somemethod
不是传递给它的那些准备好的语句的所有者。它没有创建它们,因此它不应该对其生命周期负责(比如关闭它们)。
创建它们的代码也应该负责关闭它们。 somemethod
只是“租借”了那些准备好的声明,应该尊重他们。