2011-08-25 15 views
2

目前,我成功地使用它填充了網絡數據的SQLite數據庫。我創建一個值的數組並將它們作爲一行添加到數據庫中。Android的SQLite的 - 更新表只有在不同

當前要更新數據庫,在啓動活動時,我清除數據庫並使用Web中的數據重新填充數據庫。

是否有一種簡單的方法來執行下列操作之一?

答:只有在數據發生變化時才更新表格中的一行(我不知道如何才能做到這一點,除非有一個一致的主鍵 - 會發生什麼是新行將被添加更改後的數據,但是沒有辦法知道要刪除哪些舊行)

B:從網絡獲取所有數據行,然後一次性清空並填充數據庫,而不是在獲取每行後填充數據庫

我希望這是有道理的。我可以提供我的代碼,但我不認爲這個例子特別有用。

語境:

在啓動活動,數據庫進行掃描,以用於不同的任務檢索值。但是,這需要比需要更長的時間,因爲數據庫已清空並緩慢重新填充。因此該任務只能在數據庫完全重新填充時完成。

在一個理想的世界中,數據庫將被掃描並用於該任務的值,並且該數據庫僅在完整的更新數據集可用時才被替換。

回答

2

您主要關注的方法(b) - 清除所有數據並緩慢重新填充 - 似乎是任何空白和完成填充之間的查詢都需要被拒絕。

您可以簡單地將空/重新填充過程放入事務中。因此數據庫將始終有數據供閱讀。

或者,如果這不是一個可行的解決方案,那麼如何將新的結果附加到現有的結果中,如何將「active」鍵設置爲0來插入。然後,一旦添加條目的過程完成,找到並刪除當前活動的條目,並(在同一個事務中)將非活動條目更新爲活動條目。

+0

我會給出主動的想法,我從來沒有嘗試過,謝謝你的建議。我會回來看它是否有效。 – gloscherrybomb

+0

活動密鑰解決方案提供了一種享受。不是說交易方法不會,但這似乎更容易。我只需要wastDbHelper.deleteRows(1); \t tDbHelper.updateIds(1,0); – gloscherrybomb