【发布时间】:2014-07-17 22:51:53
【问题描述】:
我实际上是在构建一个 Java 应用程序来处理和响应 RPC 事件。我发现自己一直在做以下事情,而我的 Java 知识正在碰壁。
PreparedStatement preparedStatement = null;
try {
preparedStatement = conn.prepareStatement(removeFollowersStmt);
preparedStatement.setLong(1, Long.parseLong(conversation) );
preparedStatement.setLong(2, Long.parseLong(userId) );
preparedStatement.executeUpdate();
return true;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
finally
{
try {
assert preparedStatement != null;
preparedStatement.clearParameters();
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
理想情况下,我只执行一次 try/catch/finally 并且能够从 try 中调用各种数据库交互。
我对 java 不够熟悉,无法做到这一点,但我的想法可能是我可以创建一个接受闭包的函数,该闭包将在 try 中调用?
【问题讨论】:
-
你的问题到底是什么?
-
我在每个函数中重复 try/catch/finally,如果可能的话,我只需要这样做一次。
-
因为除了 finally 块之外,在代码中的其他任何地方关闭连接都不好,并且由于连接关闭会引发您想要处理的异常,所以您别无选择,只能有 2 个 try/catch 块。
-
在关闭之前调用
clearParameters没有意义,你的assert也没有意义:preparedStatement在这里可能为空!请改用try-with-resources!
标签: java jdbc lambda java-8 try-with-resources