3 回答
TA贡献1872条经验 获得超3个赞
更好地使用try-with-resources。这会自动关闭 Connection、Statement 和 ResultSet,即使在引发异常或内部返回时也是如此。
String sql = "UPDATE users SET firstname = ? WHERE id = ?";
try (Connection con = bds.getConnection();
PreparedStatement stmt = con.prepareStatement()) {
stmt.setString(1, "shsh");
stmt.setLong(2, 2);
stmt.executeUpdate();
System.out.println("updated successfully");
}
String sql = "SELECT city_name FROM agent_cities";
try (Connection con = bds.getConnection();
PreparedStatement stmt = con.prepareStatement()) {
try (ResultSet rs = stmt.executeQuery()) {
while(rs.next()) {
System.out.println(rs.getString("city_name"));
}
}
}
这对于垃圾收集更好。防止不美观的 rs2、rs3。允许多用户并发,例如在服务器应用程序中。调用自己的查询。并且static更多的是全局变量的风格。
TA贡献1871条经验 获得超8个赞
如果我们谈论这样一个小程序,它或多或少是可以的。但是没有必要将 con、stmt 和 rs 作为静态变量保留,它们可以在方法内部声明。此外,您需要重写 try catch finally 块并正确关闭资源:
Connection con = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
// your code
} catch (SQLException e) {
e.printStackTrace();
} finally {
try { if (rs != null) rs.close(); } catch (Exception e) {e.printStackTrace();}
try { if (stmt != null) stmt.close(); } catch (Exception e) {e.printStackTrace();}
try { if (conn != null) conn.close(); } catch (Exception e) {e.printStackTrace();}
}
作为下一步,您可以检查try-with-resources构造以清理此代码。
TA贡献1850条经验 获得超11个赞
您应该使用 try-with-resources 来避免任何类型的连接泄漏。
以下示例从文件中读取第一行。它使用 BufferedReader 的实例从文件中读取数据。BufferedReader 是程序完成后必须关闭的资源:
static String readFirstLineFromFile(String path) throws IOException {
try (BufferedReader br =
new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}
添加回答
举报