在 springToolset 基于-eclipse的IDE和 maven 中编写 swing数据库应用程序。所以这是我的简单数据库连接代码,并使用flyway进行迁移。
主要课程
public static void main(final String[] args) throws SQLException {
final BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("org.h2.Driver");
ds.setUrl("jdbc:h2:target/db");
ds.setUsername("root");
ds.setPassword("");
try {
final Flyway flyway = new Flyway();
flyway.setDataSource(ds);
flyway.migrate(); // line no :12
}}
根据flyway(2.2.1)标准,Schema_name 是:
V1__init_db.sql
当我运行此代码时出现此错误:
Exception in thread "main" com.googlecode.flyway.core.api.FlywayException:
Migration of schema "PUBLIC" to version 1.2 failed! Please restore backups and roll back database and code!
at com.googlecode.flyway.core.command.DbMigrate.migrate(DbMigrate.java:199)
at com.googlecode.flyway.core.Flyway$1.execute(Flyway.java:872)
at com.googlecode.flyway.core.Flyway$1.execute(Flyway.java:819)
at com.googlecode.flyway.core.Flyway.execute(Flyway.java:1200)
at com.googlecode.flyway.core.Flyway.migrate(Flyway.java:819)
at com.swdb.exApp.Main.main(12)
任何人都知道错误是什么。请帮忙。 这也是来自 Alber Attard here
的tutoiral答案 0 :(得分:1)
检查您的数据库。之前,Flyway已针对配置的架构运行,迁移失败。如果您可以放弃架构,只需发出flyway.clean()
,您就应该重新开始。如果没有,您必须在继续之前手动执行清理。
答案 1 :(得分:0)
正如Flyway的开发人员所强调的,运行迁移时出现了问题。
理想情况下,我们从头开始。数据库在db
目录(target
)内名为ds.setUrl("jdbc:h2:target/db");
的文件夹中创建。删除db
目录。这将删除数据库中的所有内容。这将导致Flyway再次启动并执行迁移脚本。
请确保您使用的是正确的版本。本教程使我们了解以下版本(通过Maven管理哪些依赖项):
<dependencies>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.3.173</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>com.googlecode.flyway</groupId>
<artifactId>flyway-core</artifactId>
<version>2.3.1</version>
</dependency>
</dependencies>
我相信一些较新版本的H2与这些示例和我的原因问题不兼容。
你能试试吗?
此致 Albert Attard
答案 2 :(得分:0)
&#39;模式的迁移&#34; PUBLIC&#34;版本X.X失败了!&#39;通常可以出现在控制台或报表文件中,但可能会使用SQL屏蔽更严重的错误。当我遇到这个问题时,我后来注意到目标/ db文件夹有一个名为.trace.db的文件。当我在文本编辑器中查看此跟踪文件时,它向我显示了我得到的确切SQL错误,在我的情况下,我尝试使用无效的列名称插入。