如何正确更新用户计算机中的表格?

问题描述:

我有一个与更新数据库中的字段有关的概念问题。如何正确更新用户计算机中的表格?

我已经开发了使用的SQLite存储数据的Qt的C++)应用程序。文件(.db)的SQLite存储在用户计算机中。该文件在用户第一次打开应用程序时自动创建。

问题是我需要更新该数据库中的一个表。我可以使用ALTER TABLE命令执行此操作,但是如何正确更新用户计算机中分配的数据库中的表?

我是否需要创建一个函数来检查表是否没有我想要的字段,然后运行ALTER TABLE命令或者有其他一些简单/正确的方法来解决这个问题?

+0

如何分发应用程序?如果使用更新程序更新应用程序,则可以让更新程序检查列的存在并根据需要更新数据库。 – NathanOliver

+0

谢谢@NathanOliver。不幸的是,我没有更新程序,应用程序(.exe)通过电子邮件发送的链接分发。不过,我可以直接在应用程序中检查列的存在。 – KelvinS

更通用的解决方案可能是在数据库中使用版本号条目并基于此集中更改。如果您没有它,可以使用此更新创建它。至少我认为它成为在代码清晰,你对未来的修改单点:

void update_database_to_current_version() { 
    const int version = current_db_version(); // returns 1 if version is not found 

    if (version < 2) { // since version 2 table XYZ has new structure, match here 
     // 'ALTER TABLE' ... 
    } 

    // if (version < N) // DB changes starting in version N 
    // ... 

    update_db_version_to_newest(); 
} 

在另一方面,据我现在,你可以在不影响表运行ALTER TABLE几次,所以如果你愿意,这可能是一个更快的选择。

+3

通常,你所做的是一个“版本阶梯”,一个包含所有下一个版本的单一更新步骤的函数;所以这不是'switch',而是一系列'if',每一步都将版本更新到下一个版本。 –

+0

对!我只是在画我的想法......我正在用这个建议更新答案! – cbuchart

+0

非常感谢@cbuchart,它似乎是我的问题的一个很好的解决方案。我在数据库中没有版本号条目,但是我将搜索如何在** SQLite **上使用它。 – KelvinS