【发布时间】:2016-05-01 15:41:32
【问题描述】:
我使用 JDBC 来执行 SQL 查询。如果我在一个需要执行的方法中有多个 SQL 查询,那么在主 try-catch 块中创建多个 PreparedStatements 是不好的做法吗? 例如
private Result method(long id) {
final String STMT1 = "SELECT ..."
final String STMT2 = "SELECT ..."
final String STMT3 = "SELECT ..."
List<Things> thingsList;
try(PreparedStatement p1 = c.prepareStatement(STMT1)) {
PreparedStatement p2 = c.prepareStatement(STMT2);
PreparedStatement p3 = c.prepareStatement(STMT3);
p1.setLong(1, id);
p2.setLong(2, id);
p3.setLong(3, id);
ResultSet r1 = p1.executeQuery();
ResultSet r2 = p2.executeQuery();
ResultSet r3 = p3.executeQuery();
while(r1.next() && r2.next() && r3.next()) {
...
}
p2.close();
p3.close();
} catch(){...}
}
如果这是不好的做法,我将如何以更传统的方式进行?
【问题讨论】:
-
这是非常自以为是的,但是 imo,是的,这是不好的做法。如果其中一个语句由于某种原因确实失败了,则可能更难具体追踪哪一个。通常的约定是将每个查询包装在单独的 try/catch 语句中,这样您就可以分别处理每个故障。编辑:经过进一步检查,@ColonelThirtyTwo 是正确的,因为这实际上设置不正确。
-
只有第一个语句 (
p1) 在try括号中,因此它是唯一受 try-with-resource 块保护的资源。这不是“坏习惯”,这是错误的。
标签: java sql jdbc try-catch prepared-statement