2017-04-05 45 views
1

我有一個與更新數據庫中的字段有關的概念問題。如何正確更新用戶計算機中的表格?

我已經開發了使用的SQLite存儲數據的Qt的C++)應用程序。文件(.db)的SQLite存儲在用戶計算機中。該文件在用戶第一次打開應用程序時自動創建。

問題是我需要更新該數據庫中的一個表。我可以使用ALTER TABLE命令執行此操作,但是如何正確更新用戶計算機中分配的數據庫中的表?

我是否需要創建一個函數來檢查表是否沒有我想要的字段,然後運行ALTER TABLE命令或者有其他一些簡單/正確的方法來解決這個問題?

+0

如何分發應用程序?如果使用更新程序更新應用程序,則可以讓更新程序檢查列的存在並根據需要更新數據庫。 – NathanOliver

+0

謝謝@NathanOliver。不幸的是,我沒有更新程序,應用程序(.exe)通過電子郵件發送的鏈接分發。不過,我可以直接在應用程序中檢查列的存在。 – KelvinS

回答

3

更通用的解決方案可能是在數據庫中使用版本號條目並基於此集中更改。如果您沒有它,可以使用此更新創建它。至少我認爲它成爲在代碼清晰,你對未來的修改單點:

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