数据库未从 Liquibase java API 更新
Database not getting updated from Liquibase java API
我正在使用 Liquibase java API 从 databaseChangeLog 文件更新我的数据库。代码是 运行 但更改未反映在数据库中。
代码如下:
public class testclass {
public static void main(String[] args) {
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@a_valid_hostname:1521:db11gr2",
"[username]", "[password]");
Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(conn));
DatabaseChangeLog log = new DatabaseChangeLog("E:\Delta.xml");
Liquibase liquibase = new liquibase.Liquibase(log, new ClassLoaderResourceAccessor(), database);
liquibase.update(new Contexts(), new LabelExpression());
System.out.println("COMPLETED");
}catch(Exception e){
e.printStackTrace();
}
}
}
我是不是做错了什么?请帮帮我。
仔细查看您的代码,我怀疑您可能使用了错误的 ResourceAccessor
类型。
文件 "E:\Delta.xml"
实际上在您的类路径中吗?如果不是,请更改此行
Liquibase liquibase = new liquibase.Liquibase(log, new ClassLoaderResourceAccessor(), database);
到
Liquibase liquibase = new liquibase.Liquibase(log, new FileSystemResourceAccessor(), database);
这告诉 liquibase 从文件系统而不是类路径读取变更日志文件。
由于 OP 没有 post 他是如何设法让这个工作的,我在这里 post 编写了一个工作代码。请注意,我正在使用 json ChangeLog 和 MySQL.
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://*****/test",
"****", "****");
Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(conn));
Liquibase liquibase = new Liquibase("test.json", new FileSystemResourceAccessor(), database);
liquibase.update(new Contexts(), new LabelExpression());
} catch(Exception e){
// ...
}
I以 String 作为第一个参数而不是 DatabaseChangeLog 来初始化 Liquibase 是可行的。例子如下:
final Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/test?useSSL=false", "***", "***");
final Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(
new JdbcConnection(connection)
);
final Liquibase liquibase = new Liquibase("migrations.xml", new ClassLoaderResourceAccessor(), database);
liquibase.update(new Contexts(), new LabelExpression());
我正在使用 Liquibase java API 从 databaseChangeLog 文件更新我的数据库。代码是 运行 但更改未反映在数据库中。 代码如下:
public class testclass {
public static void main(String[] args) {
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@a_valid_hostname:1521:db11gr2",
"[username]", "[password]");
Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(conn));
DatabaseChangeLog log = new DatabaseChangeLog("E:\Delta.xml");
Liquibase liquibase = new liquibase.Liquibase(log, new ClassLoaderResourceAccessor(), database);
liquibase.update(new Contexts(), new LabelExpression());
System.out.println("COMPLETED");
}catch(Exception e){
e.printStackTrace();
}
}
}
我是不是做错了什么?请帮帮我。
仔细查看您的代码,我怀疑您可能使用了错误的 ResourceAccessor
类型。
文件 "E:\Delta.xml"
实际上在您的类路径中吗?如果不是,请更改此行
Liquibase liquibase = new liquibase.Liquibase(log, new ClassLoaderResourceAccessor(), database);
到
Liquibase liquibase = new liquibase.Liquibase(log, new FileSystemResourceAccessor(), database);
这告诉 liquibase 从文件系统而不是类路径读取变更日志文件。
由于 OP 没有 post 他是如何设法让这个工作的,我在这里 post 编写了一个工作代码。请注意,我正在使用 json ChangeLog 和 MySQL.
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://*****/test",
"****", "****");
Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(conn));
Liquibase liquibase = new Liquibase("test.json", new FileSystemResourceAccessor(), database);
liquibase.update(new Contexts(), new LabelExpression());
} catch(Exception e){
// ...
}
I以 String 作为第一个参数而不是 DatabaseChangeLog 来初始化 Liquibase 是可行的。例子如下:
final Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/test?useSSL=false", "***", "***");
final Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(
new JdbcConnection(connection)
);
final Liquibase liquibase = new Liquibase("migrations.xml", new ClassLoaderResourceAccessor(), database);
liquibase.update(new Contexts(), new LabelExpression());