【发布时间】:2011-08-30 15:09:40
【问题描述】:
我正在连续执行几个SELECTs,我想知道如何处理PreparedStatements。
示例代码:
//Connection conn is already declared
PreparedStatement pstmt = null;
ResultSet rset = null;
try {
String sql = "SELECT ...";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, someVar);
rset = pstmt.executeQuery();
// Use ResultSet
// A different query
sql = "SELECT ...";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, someVar);
rset = pstmt.executeQuery();
// Use ResultSet
} catch (SQLException e) {
// Handle
} finally {
if (rset != null)
rset.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
}
现在的问题是,在每次使用/使用不同的语句后关闭PreparedStatements 会更好还是完全没有区别?
我找到了一些关于重用 PreparedStatement 的信息,它总是有相同的查询,但我不确定使用不同的查询。
【问题讨论】:
-
我很确定在这个例子中使用同一个和使用两个之间的差异可以忽略不计。但是,如果您在一个循环中多次使用它们,那么有两个将是可行的方法,因为您不必每次都在数据库上重新编译查询。
-
如果您有不同的查询,您需要使用多个语句或在语句中构建开关(如果可能) - 我会选择更易于维护和可读的选项并使用多个语句。跨度>
-
这是一个非常奇怪的结构。结果是否要关联/组合成一个最终结果?是的?您熟悉 SQL
JOIN子句吗?我会花时间学习它,这样你就可以得到一个 SQL 查询。或者,如果它是两个完全独立的查询,我会在单独的方法体中执行它。 -
@BalusC 是的,我知道
JOINs。它们是 2 个不相关的SELECTs,用于生成报告。 -
那就去学习
JOIN吧。