【问题标题】:want to check if a table exists before making transaction想在进行事务之前检查表是否存在
【发布时间】:2016-07-12 12:30:40
【问题描述】:

我正在使用 java 和 sqlite 数据库编写应用程序。我正在向数据库中插入许多内容。每次插入之前,我都使用了以下 sql 语句并使用 java 执行它

CREATE TABLE IF NOT EXISTS TABLE_NAME "
        + " (ID INT NOT NULL, "
        + " PERCENT INT NOT NULL, "
        + " TASK_DATA VARCHAR(1000) ,"
        + " CONSTRAINT pk_progressID PRIMARY KEY (ID))

但是,每次都执行此语句并不是一个好习惯。还有什么替代方法可以检查表是否存在并在不存在时创建它?

【问题讨论】:

  • 为什么你认为这不是好的做法?
  • 我建议您查看检查工具,并在必要时在启动时升级您的数据库架构(例如 Liquibase、flyway),而不是在使用前随机检查。

标签: java sqlite jdbc


【解决方案1】:

数据库迁移

这个问题被称为“数据库迁移”。在您的应用程序建立的每个数据库连接上,您需要知道数据库结构和数据处于已知的预期条件和配置中。

一种解决方案是在内部标记数据库的当前状态,一种版本号。当然,数据库表可能是存储此版本信息的理想场所。

我可以继续指导您完成可以执行的各种版本控制,如何让您的应用运行 SQL 脚本和 Java 代码,以使您的任何数据库实例与您当前的最新期望保持同步。但我不需要做那个解释。

已经建立了两个非常好的项目来完成这些数据库迁移工作。没有代码让你写!这些项目中的任何一个都可以插入您的应用程序。

每次您的应用连接到数据库时,它都会检查存储在额外表中的最新已知版本信息。如果数据库实例已过期,这些工具将运行创建/修改表定义、插入/修改/删除行等所需的 SQL 脚本和/或 Java 代码。

当然,您必须在开发项目时仔细编写、测试和归档这些 SQL 脚本并更新 Java 代码。

【讨论】:

    【解决方案2】:

    这是软件版本更新和旧数据库数据的常见问题。

    最好有一个带有您自己的版本号的数据库条目。

    然后在程序启动时,您可以以定义的方式相应地检查和更新,甚至跨多个版本。

    while (database.version() < software.version) {
        software.updateToNextFrom(database.version());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      相关资源
      最近更新 更多