2013-06-11 34 views
1

在模型更改數據庫之前,可以從表中保存數據嗎?OrmLite - 在表升級前保存數據

例如我重命名一列,不會丟失數據。所以,即我想從列c1中獲取所有數據,將我的列重命名爲c2並將所有數據寫回。

+0

我不太明白你想要做什麼。您可能想編輯您的帖子以提供更多細節。 – Gray

+0

我認識到我在模型更新後會丟失一些數據。所以我想寫一些像補丁一樣的東西,在它的模式升級之前從表中加載一些數據。架構升級後,我將先前加載的數據寫回到表或另一個。 – Happo

回答

0

我想從列c1中獲取所有數據,將列重命名爲c2並將所有數據寫回。

Sqlite不支持重命名列,所以這不會在Android下工作。你當然可以添加一個額外的列。在Android/ORMLite下有一些關於模式更改的很好的文檔。看到這個頁面:

http://ormlite.com/docs/upgrade-schema

例如,你可以做以下架構更新:

dao.executeRaw(
    "ALTER TABLE `account` ADD COLUMN hasDog BOOLEAN DEFAULT 0;"); 
dao.updateRaw("UPDATE `account` SET hasDog = 1 WHERE dogCount > 0;"); 
2

下面是來自ORMLite documentation報價:「你不能重命名或刪除一列或更改約束條件「。

那麼你的選擇是:

  1. 假的東西,因爲他們,
  2. 添加新列,從舊到新複製所有數據作爲升級的一部分,而忽略舊列共,或者
  3. 使用刪除/創建策略進行升級:將表中的數據備份到臨時表中,刪除表,根據需要重新創建表,將所有數據複製回來,最後放下臨時表。

數據庫的升級總是緊張的事務(需要大量的錯誤處理,大量的測試),坦率地說,如果名稱是唯一你關注,我會離開它單獨(選項1)。如果你真的需要改變它,那麼選項2的風險很低,但會留下一個「死亡」列和數據。例如,如果數據是整個數據庫大小的重要百分比,則可以選擇選項3。

相關問題