2
我以編程方式對DatabaseChangeLog對象進行了更改。 我怎麼能基於java的DatabaseChangeLog生成diffChangeLogFile文件。如何以編程方式從DatabaseChangeLog生成xml文件
編輯: 這裏是一個例子
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對象作爲輸入,它會刪除從它的dropColumn改變時,表名是等於表名的參數。
在對DatabaseChangeLog對象進行此修改後,我想生成一個xml文件,其中包含相對於DatabaseChangeLog對象(爲了進行更新而在liquibase生成diff後生成的xml)的變更集。
像這樣:
databaseChange.generateXmlFile(pathToFile);
你能解釋一下什麼「...程序上改變了DatabaseChangeLog對象...」的含義?我不明白你做了什麼。 – Jens
@Jens我上面加了一個例子 – larnouch
也許你可以使用主[Liquibase](http://www.liquibase.org/javadoc/liquibase/Liquibase.html)類並調用它的一個方法來完成這個任務。我沒有直接從Java中調用liquibase,也沒有編寫任何liquibase插件。所以也許這是因爲我缺乏這方面的知識,但是你如何運行代碼(或者你如何運行liquibase?) – Jens