From fe5076a8267b52e05f75773c2d9719064c8b45fc Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Thu, 19 Feb 2026 06:05:07 +0000 Subject: [PATCH] Refactor DatabaseHandler to use local Statement objects Refactored `DatabaseHandler.java` to remove the static shared `Statement` field, which was causing concurrency issues and potential resource leaks. - `execQuery`: Now uses a local `Statement` and calls `closeOnCompletion()` to ensure the statement is closed when the returned `ResultSet` is closed. - `execAction`: Now uses a local `Statement` within a try-with-resources block for automatic resource management. - Improved error handling in `execQuery` to close the statement if an exception occurs during execution. This change improves thread safety and resource management in database operations. Co-authored-by: G30RG3-GJ <203693057+G30RG3-GJ@users.noreply.github.com> --- .../assistant/database/DatabaseHandler.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/library/assistant/database/DatabaseHandler.java b/src/library/assistant/database/DatabaseHandler.java index e9c4f53..a6127cc 100644 --- a/src/library/assistant/database/DatabaseHandler.java +++ b/src/library/assistant/database/DatabaseHandler.java @@ -35,7 +35,6 @@ public final class DatabaseHandler { private static final String DB_URL = "jdbc:derby:database;create=true"; private static Connection conn = null; - private static Statement stmt = null; static { createConnection(); @@ -109,23 +108,28 @@ private static void readDBTable(Set set, DatabaseMetaData dbmeta, String } public ResultSet execQuery(String query) { - ResultSet result; + Statement stmt = null; try { stmt = conn.createStatement(); - result = stmt.executeQuery(query); + stmt.closeOnCompletion(); + return stmt.executeQuery(query); } catch (SQLException ex) { System.out.println("Exception at execQuery:dataHandler" + ex.getLocalizedMessage()); + if (stmt != null) { + try { + stmt.close(); + } + catch (SQLException e) { + LOGGER.log(Level.ERROR, "{}", e); + } + } return null; } - finally { - } - return result; } public boolean execAction(String qu) { - try { - stmt = conn.createStatement(); + try (Statement stmt = conn.createStatement()) { stmt.execute(qu); return true; }