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;
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);