即使引发 SQLException,flywaydb 也会应用 java 迁移

Posted

技术标签:

【中文标题】即使引发 SQLException,flywaydb 也会应用 java 迁移【英文标题】:flywaydb applies java migrations even when SQLException is raised 【发布时间】:2015-09-03 19:15:33 【问题描述】:

我想使用 flywaydb 来对我的数据库进行版本控制并管理数据库架构和数据迁移。我想使用 java 迁移和 java api,因为我认为将它集成到我的应用程序中更容易。问题是,当我应用迁移时,虽然我的 sql 准备语句出现语法错误并引发 SQLException,但 flywaydb (schema_version) 的元数据表包含我的迁移已应用的记录。有没有办法改变这种行为?我的java迁移类实现了JdbcMigration

public class V1_2__Change_commnets_to_int implements JdbcMigration 
    @Override
    public void migrate(Connection con)
        PreparedStatement stm = con.prepareStatement("Query with syntax error");
        try
            stm.execute();
        catch(SQLException e)
            e.printStackTrace();
        finally
            stm.close();
        
    

您能否提供一个示例,说明如何在 flywaydb 中将校验和与 java 迁移一起使用?

【问题讨论】:

【参考方案1】:

您的代码捕获了异常并继续执行,因此 Flyway 不知道有什么问题。

最好重新扔

catch(SQLException e)
    throw new RuntimeException(e);

【讨论】:

以上是关于即使引发 SQLException,flywaydb 也会应用 java 迁移的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 查询错误 SQLException

java.Sql.SQLException,无法加载类 net.ucanaccess.jdbc.UcanaccessDriver

conn.rollback() 上的错误未处理 SQLException...如何正确使用 commit()?

即使代码具有给定值,ValueError 也会引发

Pyudev:即使属性存在,也会引发 KeyError

Validators.required 会引发错误,即使其中有一个值