3 回答

TA貢獻1872條經驗 獲得超4個贊
更好地使用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();
}
}
添加回答
舉報