2017-03-21 27 views
2

DatabaseChangeLogオブジェクトをプログラムで変更しました。 JavaからのそのDatabaseChangeLogに基づいてdiffChangeLogFileファイルを生成する方法はありますか。DatabaseChangeLogからxmlファイルをプログラムで生成する方法

EDIT:ここで は

public DatabaseChangeLog removeDropColumnChangeFromDatabaseChangeLog(
      DatabaseChangeLog databaseChangeLog, String oldName, 
      String newName, String tableName) { 

     DatabaseChangeLog changeLog = databaseChangeLog; 
     Collection<ChangeSet> changeSetsToRemove = new ArrayList<ChangeSet>(); 

     List<ChangeSet> changeSets = changeLog.getChangeSets(); 

     // Remove DropColumnChange from ChangeSets using tableName, oldName and 
     // newName 
     for (ChangeSet cs : changeSets) { 
      for (Change change : cs.getChanges()) { 
       if (change instanceof DropColumnChange) { 
        DropColumnChange aux2 = (DropColumnChange) change; 
        if (aux2.getTableName().equals(tableName)) { 
         if (aux2.getColumnName().equals(oldName)) { 
          changeSetsToRemove.add(cs); 
         } 
        } 
       } 
      } 
     } 
     changeSets.removeAll(changeSetsToRemove); 
     DatabaseChangeLog databaseChangeLogWithoutAddColumn = new DatabaseChangeLog(); 
     for (ChangeSet cs : changeSets) { 
      databaseChangeLogWithoutAddColumn.addChangeSet(cs); 
     } 
     return databaseChangeLogWithoutAddColumn; 
    } 

例であり、この方法は、入力としてDatabaseChangeLogオブジェクトを有し、テーブル名がtableNameパラメータに等しい場合、それはそれからdropColumn変更が削除されます。

DatabaseChangeLogオブジェクトのこの変更の後、DatabaseChangeLogオブジェクト(Liquibaseが更新のためにdiffの後に生成するxml)に関連するチェンジセットを含むxmlファイルを生成します。このような

何か:

databaseChange.generateXmlFile(pathToFile)。

+0

「... DatabaseChangeLogオブジェクトの変更はプログラム的に...」ということを説明できますか?私はあなたがしたことを理解していません。 – Jens

+0

@Jens私は上記の例を追加しました – larnouch

+0

メインの[Liquibase](http://www.liquibase.org/javadoc/liquibase/Liquibase.html)クラスを使用して、その方法の1つを呼び出すことができます。私はJavaから直接呼び出すことによってliquibaseを使用していないし、liquibaseプラグインを書いていない。だから多分私の知識の不足のためですが、どのようにコードを実行するのですか(どのようにliquibaseを実行しますか?) – Jens

答えて

3

はFinnaly私はここ

/** 
    * Prints changeLog that would bring the target database to be the same as 
    * the reference database 
    */ 
    public void print(PrintStream out, ChangeLogSerializer changeLogSerializer) throws ParserConfigurationException, IOException, DatabaseException { 

     List<ChangeSet> changeSets = generateChangeSets(); 

     changeLogSerializer.write(changeSets, out); 

     out.flush(); 
    } 

(私たちはdatabaseChangeLogからchnageSetsのリストを取得することができます)。それはxmlファイル出力にチェンジセットのリストを変換する方法LiquiBaseをソースコードに見つかった私は、生成方法の例でありますdatabaseChangeLogオブジェクトに変更を加えた後のxmlファイルの出力

 // TESTING CHANGELOG GENERATION 
     PrintStream printStreamFile =null; 
     try { 
      printStreamFile = new PrintStream("pathTofile/changeLogAfterChange.xml"); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
     XMLChangeLogSerializer changeLogSerializer = new XMLChangeLogSerializer(); 

     try { 
      changeLogSerializer.write(databaseChangeLog.getChangeSets(), printStreamFile); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

これは役に立ちます。

関連する問題