我正在尝试使用Liquibase在数据库中创建几个表。
一些背景:我在本地 h2 数据库上执行了相同的 changelog.xml 文件,它运行成功。我用松鼠测试了下面的oracle数据库,用户名,密码和驱动程序,并成功连接。所以我相当确定我面临着一个液碱问题。我做了广泛的谷歌搜索,在SO或其他任何地方都没有找到任何可以帮助我的东西。
我在命令提示符下输入了以下内容:
C:>java -jar liquibase-core-2.0.5.jar --driver=oracle.jdbc.OracleDriver
--classpath=ojdbc6-11.2.0.3.0.jar --changeLogFile=changelog.xml
--url="jdbc:oracle:thin:@myDatabase"
--username=myUsername --password=myPassword --logLevel=debug update
其中返回:
DEBUG 9/30/13 3:09 PM:liquibase: Unable to load/access Apache Derby driver class
to check version
DEBUG 9/30/13 3:09 PM:liquibase: Connected to myUsername@jdbc:oracle:thin:@myDatabase
DEBUG 9/30/13 3:10 PM:liquibase: Executing QUERY database command: SELECT LOCKED
FROM DATABASECHANGELOGLOCK WHERE ID=1 FOR UPDATE
Liquibase Update Failed: Empty result set, expected one row
SEVERE 9/30/13 3:10 PM:liquibase: Empty result set, expected one row
liquibase.exception.LockException: liquibase.exception.DatabaseException: Empty
result set, expected one row
at liquibase.lockservice.LockService.acquireLock(LockService.java:121)
at liquibase.lockservice.LockService.waitForLock(LockService.java:61)
at liquibase.Liquibase.update(Liquibase.java:102)
at liquibase.integration.commandline.Main.doMigration(Main.java:825)
at liquibase.integration.commandline.Main.main(Main.java:134)
Caused by: liquibase.exception.DatabaseException: Empty result set, expected one
row
at liquibase.util.JdbcUtils.requiredSingleResult(JdbcUtils.java:124)
at liquibase.executor.jvm.JdbcExecutor.queryForObject(JdbcExecutor.java:
159)
at liquibase.executor.jvm.JdbcExecutor.queryForObject(JdbcExecutor.java:
167)
at liquibase.executor.jvm.JdbcExecutor.queryForObject(JdbcExecutor.java:
163)
at liquibase.lockservice.LockService.acquireLock(LockService.java:96)
... 4 more
我在这里找到了答案:https://forum.liquibase.org/t/message-regarding-an-empty-result-set-for-databasechangeloglock/1487/2
删除数据库更改日志锁定表为我解决了这个问题。
如果你的数据库更改日志锁为空,错误将始终出现。(我不小心删除了此表的记录后遇到了这个问题)。
我找到的解决方案很简单:
只需插入一个 ID=1、LOCKED=0、LOCKGRANTED=null、LOCKEDBY=null 的虚拟行
就是这样!
我们在尝试使用 postgresql 10.4 使用 liquibase 时遇到了相同的核心异常问题:
Caused by: liquibase.exception.DatabaseException: Expected single row from
liquibase.statement.core.GetViewDefinitionStatement@1de5f25 but got 0`
对我们来说,这似乎是我们的jdbc驱动程序的问题。
我们的解决方案是将 jdbc 驱动程序从 9.3-1102-jdbc41 升级到 9.4-1202-jdbc41。
就我而言,问题是我使用了
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901-1.jdbc4</version>
</dependency>
而不是
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.5</version>
</dependency>
对于PostgreSQL 10.6。这解决了问题