]> WPIA git - gigi.git/blobdiff - src/org/cacert/gigi/database/DatabaseConnection.java
FIX: Better DB upgrade
[gigi.git] / src / org / cacert / gigi / database / DatabaseConnection.java
index ef9b19cc71cbab89c6bbb5193479036eb90d1dd9..5d987191a248452717c61e312f77d28fceaa6b95 100644 (file)
@@ -41,10 +41,13 @@ public class DatabaseConnection {
         try {
             c = DriverManager.getConnection(credentials.getProperty("sql.url") + "?zeroDateTimeBehavior=convertToNull", credentials.getProperty("sql.user"), credentials.getProperty("sql.password"));
             PreparedStatement ps = c.prepareStatement("SET SESSION wait_timeout=?, time_zone='+0:00';");
-            ps.setInt(1, CONNECTION_TIMEOUT);
-            ps.execute();
-            ps.close();
-            adHoc = c.createStatement();
+            try {
+                ps.setInt(1, CONNECTION_TIMEOUT);
+                ps.execute();
+                adHoc = c.createStatement();
+            } finally {
+                ps.close();
+            }
         } catch (SQLException e) {
             e.printStackTrace();
         }
@@ -119,20 +122,23 @@ public class DatabaseConnection {
     private static void upgrade(int version) {
         try {
             Statement s = getInstance().c.createStatement();
-            while (version < CURRENT_SCHEMA_VERSION) {
-                try (InputStream resourceAsStream = DatabaseConnection.class.getResourceAsStream("upgrade/from_" + version + ".sql")) {
-                    if (resourceAsStream == null) {
-                        throw new Error("Upgrade script from version " + version + " was not found.");
+            try {
+                while (version < CURRENT_SCHEMA_VERSION) {
+                    try (InputStream resourceAsStream = DatabaseConnection.class.getResourceAsStream("upgrade/from_" + version + ".sql")) {
+                        if (resourceAsStream == null) {
+                            throw new Error("Upgrade script from version " + version + " was not found.");
+                        }
+                        SQLFileManager.addFile(s, resourceAsStream, ImportType.PRODUCTION);
                     }
-                    SQLFileManager.addFile(s, resourceAsStream, ImportType.PRODUCTION);
+                    version++;
                 }
-                version++;
+                s.addBatch("UPDATE schemeVersion SET version='" + version + "'");
+                System.out.println("UPGRADING Database to version " + version);
+                s.executeBatch();
+                System.out.println("done.");
+            } finally {
+                s.close();
             }
-            s.addBatch("INSERT INTO schemeVersion SET version='" + version + "'");
-            System.out.println("UPGRADING Database to version " + version);
-            s.executeBatch();
-            System.out.println("done.");
-            s.close();
         } catch (SQLException e) {
             e.printStackTrace();
         } catch (IOException e) {