From: yuki Date: Mon, 19 Apr 2010 02:57:45 +0000 (+0000) Subject: ver0.4.xのDBをver.0.5以降に対応できるようにするコマンドを実装 X-Git-Tag: rel20100524_ver0.6.1~5^2~1 X-Git-Url: http://git.osdn.net/view?p=coroid%2FNicoBrowser.git;a=commitdiff_plain;h=3841ba36bf46087a81f81170fcdd491a93f5dcab ver0.4.xのDBをver.0.5以降に対応できるようにするコマンドを実装 git-svn-id: http://192.168.11.7/svn/repository/NicoBrowser/branches/dev20100419_update_for_04@302 bdf3b611-c98c-6041-8292-703d9c9adbe7 --- diff --git a/src/nicobrowser/main/Main.java b/src/nicobrowser/main/Main.java index 4c346c5..549901c 100644 --- a/src/nicobrowser/main/Main.java +++ b/src/nicobrowser/main/Main.java @@ -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(); diff --git a/src/nicobrowser/update/DBUpdater.java b/src/nicobrowser/update/DBUpdater.java index 4e558a7..407eaec 100644 --- a/src/nicobrowser/update/DBUpdater.java +++ b/src/nicobrowser/update/DBUpdater.java @@ -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);