【发布时间】:2016-03-11 10:27:57
【问题描述】:
我是 jdbc 编程的新手。我正在多次创建PreparedStatement 的实例并将其分配给相同的引用变量。在创建PreparedStatement 的第二个实例之前,我是否需要关闭PreparedStatement 的第一个实例?
oPrepStmt = oRoot.con.prepareStatement(strSql);
if (strProviderType.length() > 0) {
strSql += " and users.usertype IN (?)";
// DO I need to close prepare statement, before creating another instance of preparestatement and assigning to same reference variable.
// i.e. oPrepStmt.close();
oPrepStmt = oRoot.con.prepareStatement(strSql);
oPrepStmt.setString(2,strProviderType);
}
oPrepStmt.setInt(1,oRoot.getTrUserId());
preparedstatement 未关闭的第一个实例是否会导致资源泄漏?
【问题讨论】:
-
你为什么要这样?为什么不先构造完整的查询字符串,然后准备语句?
-
如您所见,我需要动态创建查询。
-
"preparedstatement 的未关闭的第一个实例是否会导致资源泄漏" - 是的(尽管它在一定程度上取决于 DBMS 和 JDBC 驱动程序)。
-
你能告诉我更多关于这个的细节吗?此外,您能建议编写此类代码的最佳方法吗?
-
可以先确定需要的sql,准备好语句,再确定是否需要设置参数。多次准备一条语句的开销高于使用两条 if 语句而不是一条。
标签: java database jdbc prepared-statement