【问题标题】:Check if table exists using mybatis and Oracle使用mybatis和Oracle检查表是否存在
【发布时间】:2016-08-15 10:11:15
【问题描述】:

我正在使用 MyBatis 创建一个名为 User 的 Oracle 表。如果该表存在,它只会显示消息Table User already exists 而不会再次创建它。目前我正在使用这种方法。

public void createTable() {
    try {
        userMapper.createTable();
    } catch (BadSqlGrammarException e) {
        log.error("Table User already exists");
    }
}

现在有点用了。但我不认为这是一种可靠的方法,因为有多种方法可以触发BadSqlGrammarException

除了捕捉异常,我也想过先检查表是否存在,但不调用过程就找不到方法。

有没有优雅正确的方法来使用Mybatis和Oracle检查表是否存在?

【问题讨论】:

    标签: oracle mybatis


    【解决方案1】:

    我找到了实现这一目标的方法。

    在mybatis mapper文件中添加如下文字

    <select id="checkTableExists" resultType="int">
    <![CDATA[
        SELECT COUNT(*) FROM user_tables WHERE table_name = 'CHECKSTATUS_LOG'
    ]]>
    </select>
    

    在映射器类中声明它(当然还有createTable方法)

    public interface CheckStatusLogMapper {
        void createTable();
        int checkTableExists();
    }
    

    那你就可以这样使用了

    public void createTableIfNotExists) {
        boolean b = checkTableExists();
        if(!b) {
            checkStatusLogMapper.createTable();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-10-27
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      • 2012-01-08
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      • 2014-12-18
      相关资源
      最近更新 更多