如何以编程方式从 DatabaseChangeLog 生成 xml 文件
How to generate xml file from DatabaseChangeLog programmatically
我以编程方式对 DatabaseChangeLog 对象进行了更改。
我如何根据来自 java.
的 DatabaseChangeLog 生成 diffChangeLogFile 文件
编辑:
这是一个例子
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 对象作为输入,并且当 table 名称等于 tableName 参数时,它将从中删除 dropColumn 更改。
在对 DatabaseChangeLog 对象进行此修改后,我想生成一个 xml 文件,其中包含相对于 DatabaseChangeLog 对象的变更集(liquibase 在 diff 之后生成的 xml 以便进行更新).
像这样:
databaseChange.generateXmlFile(路径到文件);
最后我在 liquibase 源代码中发现它如何将 changeSets 列表转换为 xml 文件输出。(我们可以从 databaseChangeLog 检索 chnageSets 列表)
/**
* 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 对象进行更改后生成 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();
}
希望对您有所帮助。
我以编程方式对 DatabaseChangeLog 对象进行了更改。 我如何根据来自 java.
的 DatabaseChangeLog 生成 diffChangeLogFile 文件编辑: 这是一个例子
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 对象作为输入,并且当 table 名称等于 tableName 参数时,它将从中删除 dropColumn 更改。
在对 DatabaseChangeLog 对象进行此修改后,我想生成一个 xml 文件,其中包含相对于 DatabaseChangeLog 对象的变更集(liquibase 在 diff 之后生成的 xml 以便进行更新).
像这样:
databaseChange.generateXmlFile(路径到文件);
最后我在 liquibase 源代码中发现它如何将 changeSets 列表转换为 xml 文件输出。(我们可以从 databaseChangeLog 检索 chnageSets 列表)
/**
* 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 对象进行更改后生成 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();
}
希望对您有所帮助。