2010-09-13 127 views
1

喜(這是我的第一篇文章在計算器上:),SQLiteOpenHelper.onUpgrade爲什麼會失敗?

每次提高我的數據庫版本,推動升級應用 用戶

,奇怪的事情發生了。對於一些人來說工作完全正常, 和一些報告崩潰(包括通過市場的報告 系統),缺乏我剛添加在onUpgrade中的表列。

如果你想看到的方法: http://code.google.com/p/tag-todo-list/source/browse/trunk/Donut/src/com/android/todo/data/ToDoDB.java#136

我不能當場出現在onUpgrade任何異常。我在 當前正在做的繞過這些問題是攔截 例外,其中第一次調用新字段,然後 然後調用手動升級,這是很髒的。

此外,應用程序有時會在訪問主表時產生一個'沒有這樣的表'SQLiteException(對於某些用戶來說,只能用於某些用戶),這非常奇怪......有人知道爲什麼發生這些事情嗎?或者你能在我的代碼中發現錯誤嗎?

感謝, 張志賢

回答

0

我沒有通過深入你的代碼讀取,但你值無慾無求的記錄,當你增加一列?我可以看到你在那裏設置了一個默認值,但是當你第一次在現有的表中添加一個新的列時,你的表中現有記錄的列字段是什麼?

我在版本升級時有類似的問題,但通過執行db.exec("UPDATE...函數調用,我可以將默認值輸入到所有現有記錄中。這固定了很多那些「X列不存在」的錯誤等。

+0

這有什麼進展? – Adriaan 2010-09-14 03:04:47

+0

嗨,謝謝你的回答,以及我想這可能是很好的做法,並且從現在開始,更新的事情。任何結果可能需要一些時間,我的應用程序的幾個新版本才能顯示:)我不認爲這是問題,但我認爲例外是當我在光標中包含相應的列。而那些'沒有這樣的表'的例外,只爲一些...這不應該發生,不管是什麼..我想我會研究一些官方的開源應用程序,看看他們做了什麼關於數據庫版本控制,表格創作等,如果我發現一些東西我會張貼在這裏爲其他人找到 – Sandman 2010-09-14 07:41:38

+0

嗯,當我將它們包括在光標中時,我得到了這些例外。當你對數據進行操作時,你只會注意到它們,無論是從數據庫讀取還是從數據庫寫入數據。你用什麼系統來開發你的應用程序?我很驚訝,當你測試的時候,如果你不這樣做,特別是當你的數據是'not null'時,你不會得到異常彈出。而且,回饋社區總是令人高興的,但是要給予信任。點擊刻度標記。 – Adriaan 2010-09-14 10:41:36

相關問題