OSDN Git Service

ver0.4.xのDBをver.0.5以降に対応できるようにするコマンドを実装
authoryuki <yuki@bdf3b611-c98c-6041-8292-703d9c9adbe7>
Mon, 19 Apr 2010 02:57:45 +0000 (02:57 +0000)
committeryuki <yuki@bdf3b611-c98c-6041-8292-703d9c9adbe7>
Mon, 19 Apr 2010 02:57:45 +0000 (02:57 +0000)
git-svn-id: http://192.168.11.7/svn/repository/NicoBrowser/branches/dev20100419_update_for_04@302 bdf3b611-c98c-6041-8292-703d9c9adbe7

src/nicobrowser/main/Main.java
src/nicobrowser/update/DBUpdater.java

index 4c346c5..549901c 100644 (file)
@@ -74,6 +74,9 @@ public class Main {
         if (args.length > 0 && "sync".equals(args[0])) {
             updater.sync();
             return;
+        } else if (args.length > 0 && "sync4".equals(args[0])) {
+            updater.sync_for_4();
+            return;
         }
         updater.update();
 
index 4e558a7..407eaec 100644 (file)
@@ -7,6 +7,9 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.Statement;
 import liquibase.commandline.Main;
 import liquibase.exception.CommandLineParsingException;
 import nicobrowser.Config;
@@ -19,7 +22,34 @@ public class DBUpdater {
     private static final String UPDATE_FILE = "db_update_script.xml";
     private static final String SYNC_FILE = "db_for_sync_script.xml";
 
+    /**
+     * ver.0.4.xからver.0.5.xにアップグレードするためのDBアップデート.
+     * LiquiBaseはIDとしてスクリプトファイル名を利用しているが, これは環境に依存する(フルパスで記録される)ため,
+     * 環境を変更すると本来同一であるべきものが同一でないとみなされてしまう.
+     * これの回避策としてファイル名を固定した.
+     * 既存のカラム値をこの固定名にアップデートする.
+     */
+    public void sync_for_4() throws IOException {
+        try {
+            Class.forName("org.h2.Driver");
+            Connection con = DriverManager.getConnection("jdbc:h2:" + Config.getInstance().getDbFile(), "sa", "");
+
+            Statement statement = con.createStatement();
+            String sql = "UPDATE DATABASECHANGELOG SET FILENAME='db_update_script.xml'";
+            statement.executeUpdate(sql);
+
+            statement.close();
+            con.close();
+            log.info("DBのアップデートが終了しました.");
+        } catch (Exception ex) {
+            log.fatal("DBのアップデートに失敗しました.", ex);
+            throw new IOException(ex);
+        }
+    }
+
     public void sync() throws IOException {
+        sync_for_4();
+
         File updateFile = new File(Config.getAppHome(), UPDATE_FILE);
         InputStream resource = ClassLoader.getSystemResourceAsStream("resources/" + SYNC_FILE);