Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当试图从Java代码运行DDL命令时,它不是由liquibase创建的_Java_Liquibase - Fatal编程技术网

当试图从Java代码运行DDL命令时,它不是由liquibase创建的

当试图从Java代码运行DDL命令时,它不是由liquibase创建的,java,liquibase,Java,Liquibase,更新: 我认为问题出在这一行,因为当我调用changelog.getChangeSets()时,它返回一个空列表,那么这段代码怎么了 static liquibase.changelog.DatabaseChangeLog changelog = new DatabaseChangeLog( "src/main/resources/changelog.xml"); 原职: 我的目标是使用Java类中现有的changelog运行数据库DDL命令。 目前我的设置如下

更新:

我认为问题出在这一行,因为当我调用
changelog.getChangeSets()
时,它返回一个空列表,那么这段代码怎么了

    static liquibase.changelog.DatabaseChangeLog changelog = new DatabaseChangeLog(
            "src/main/resources/changelog.xml");
原职:

我的目标是使用Java类中现有的changelog运行数据库DDL命令。 目前我的设置如下:

public class LiquibaseWithJavaCode {
    //find the location of the existing changelog.xml file
    static liquibase.changelog.DatabaseChangeLog changelog = new DatabaseChangeLog(
            "src/main/resources/changelog.xml");

    static void executeUpdate1() throws SQLException, LiquibaseException {

        java.sql.Connection connection = getConnection();

        Database database = DatabaseFactory.getInstance()
                .findCorrectDatabaseImplementation(
                        new JdbcConnection(connection));

        Liquibase liquibase = new liquibase.Liquibase(changelog,
                new ClassLoaderResourceAccessor(), database);

        liquibase.update(new Contexts(), new LabelExpression());
    }

    public static Connection getConnection() throws SQLException {

        Connection conn = null;
        Properties connectionProps = new Properties();
        connectionProps.put("user", "liquibase");
        connectionProps.put("password", "password");

        conn = DriverManager
                .getConnection(
                        "jdbc:sqlserver://111.11.1.1;databaseName=liquibase;SelectMethod=cursor",
                        connectionProps);
        return conn;
    }
}

    public static void main(String[] args) throws SQLException,
        LiquibaseException {
            executeUpdate1();
    }
当我运行它时,这里是输出:

我创建了
changelog.xml
,它包含了许多处理大量DDL命令的变更集。但是
changeLogFile
似乎不包含任何变更集,它是空的。我仔细检查了数据库,实际上没有创建任何表,只创建了两个表
DATABASECHANGELOG
DATABASECHANGELOGLOCK


我做错什么了吗?我如何纠正它?老实说,我对它不熟悉,所以请提供建议。

新建数据库更改日志只会创建一个新的空更改日志文件。要分析现有文件,请使用:

ChangeLogParser parser = ChangeLogParserFactory.getInstance().getParser("src/main/resources/changelog.xml", resourceAccessor);
DatabaseChangeLog databaseChangeLog = parser.parse("src/main/resources/changelog.xml", new ChangeLogParameters(), resourceAccessor);

对于resourceAccessor,您可能希望
新建ClassLoaderResourceAccessor()

新建数据库changelog只创建一个新的空changelog文件。要分析现有文件,请使用:

ChangeLogParser parser = ChangeLogParserFactory.getInstance().getParser("src/main/resources/changelog.xml", resourceAccessor);
DatabaseChangeLog databaseChangeLog = parser.parse("src/main/resources/changelog.xml", new ChangeLogParameters(), resourceAccessor);

对于resourceAccessor,您可能希望
新建ClassLoaderResourceAccessor()

新建数据库changelog只创建一个新的空changelog文件。要分析现有文件,请使用:

ChangeLogParser parser = ChangeLogParserFactory.getInstance().getParser("src/main/resources/changelog.xml", resourceAccessor);
DatabaseChangeLog databaseChangeLog = parser.parse("src/main/resources/changelog.xml", new ChangeLogParameters(), resourceAccessor);

对于resourceAccessor,您可能希望
新建ClassLoaderResourceAccessor()

新建数据库changelog只创建一个新的空changelog文件。要分析现有文件,请使用:

ChangeLogParser parser = ChangeLogParserFactory.getInstance().getParser("src/main/resources/changelog.xml", resourceAccessor);
DatabaseChangeLog databaseChangeLog = parser.parse("src/main/resources/changelog.xml", new ChangeLogParameters(), resourceAccessor);

对于resourceAccessor,您可能需要
新的ClassLoaderResourceAccessor()

谢谢您的回答,我已经尝试过运行它,看起来我在
parser.parse(“src/main/resources/changelog.xml”,new ChangeLogParameters(),resourceAccessor”)上得到了
liquibase.exception.ChangeLogParseException
行。我也尝试过从windows使用绝对路径,但仍然得到这个异常。我错过什么了吗?或者与我正在运行的Liquibase版本有关?此异常的更具体原因是“src/main/resources/changelog.xml不存在”。ResourceAccessor用于查找变更日志,包括路径。如果您使用的是ClassLoaderResourceAccessor,那么路径应该更像“changelog.xml”,因为src/main/resources最终将作为类路径根。如果您想(或需要)使用完整的/src/main/resources/changelog.xml,您可能需要改用FileSystemResourceAccessor。谢谢您的回答,我已经尝试过运行它,并且在
parser.parse(“src/main/resources/changelog.xml”)上看到
liquibase.exception.ChangeLogParseException
,新的ChangeLogParameters(),resourceAccessor)行。我也尝试过从windows使用绝对路径,但仍然得到这个异常。我错过什么了吗?或者与我正在运行的Liquibase版本有关?此异常的更具体原因是“src/main/resources/changelog.xml不存在”。ResourceAccessor用于查找变更日志,包括路径。如果您使用的是ClassLoaderResourceAccessor,那么路径应该更像“changelog.xml”,因为src/main/resources最终将作为类路径根。如果您想(或需要)使用完整的/src/main/resources/changelog.xml,您可能需要改用FileSystemResourceAccessor。谢谢您的回答,我已经尝试过运行它,并且在
parser.parse(“src/main/resources/changelog.xml”)上看到
liquibase.exception.ChangeLogParseException
,新的ChangeLogParameters(),resourceAccessor)行。我也尝试过从windows使用绝对路径,但仍然得到这个异常。我错过什么了吗?或者与我正在运行的Liquibase版本有关?此异常的更具体原因是“src/main/resources/changelog.xml不存在”。ResourceAccessor用于查找变更日志,包括路径。如果您使用的是ClassLoaderResourceAccessor,那么路径应该更像“changelog.xml”,因为src/main/resources最终将作为类路径根。如果您想(或需要)使用完整的/src/main/resources/changelog.xml,您可能需要改用FileSystemResourceAccessor。谢谢您的回答,我已经尝试过运行它,并且在
parser.parse(“src/main/resources/changelog.xml”)上看到
liquibase.exception.ChangeLogParseException
,新的ChangeLogParameters(),resourceAccessor)行。我也尝试过从windows使用绝对路径,但仍然得到这个异常。我错过什么了吗?或者与我正在运行的Liquibase版本有关?此异常的更具体原因是“src/main/resources/changelog.xml不存在”。ResourceAccessor用于查找变更日志,包括路径。如果您使用的是ClassLoaderResourceAccessor,那么路径应该更像“changelog.xml”,因为src/main/resources最终将作为类路径根。如果您想(或需要)使用完整的/src/main/resources/changelog.xml,您可能需要使用FileSystemResourceAccessor