2011-06-26 98 views
0

我一直在測試我的應用程序,它使用來自Reto Meir的地震示例的dbadapter。一切都會好幾天,但今天在設備上調試應用程序時,我得到了'沒有這樣的表'的錯誤。我改變了數據庫的名稱,並且再次運行得很好。這不會讓我對潛在的其他用戶有很大的信心。與android的sqlite沒有這樣的表

由於看起來不可能在手機上看到數據庫,所以在設計上我想,我看不出如何找出造成問題的原因並採取措施避免它。數據庫似乎在程序開始時打開,但在處理選擇查詢時出錯。只是更改表名不能解決它,它必須是一個新的數據庫名稱。

由於名稱更改允許它運行正常,我看不到代碼是錯誤的。我想知道數據是否損壞。

我也發現,在成功插入一行之後,稍後將光標移到所有項目上,有時會產生-1錯誤,而不是針對某個列名稱的get。列名稱如何從列索引中退出?

我已經搜索了這種類型的問題,雖然有很多人問題和很多答覆,我找不到任何通知這些問題的根本原因 - 這是我後。

+1

向我們展示一些代碼和完整例外。 –

+0

您可以使用Android插件的DDMS視圖的eclipse來複制設備或模擬器的數據庫。你會發現一個文件瀏覽器,你可以用它來導航到你的應用程序目錄(/ data/data/[你應用程序的包名]/databases /)。然後,您可以將數據庫文件拖到您的計算機上並打開它,例如使用[SQLite Manager for Firefox](https://addons.mozilla.org/en-US/firefox/addon/sqlite-manager/)。 – Flo

+2

@Flo:只適用於仿真器,不適用於設備。 – CommonsWare

回答

1

數據庫可以在手機上使用,如果您可以在手機上使用'adb shell',還可以使用sqlite3命令行shell來連接,檢查,查詢和修改數據庫。這與使用oracle或mysql的命令行工具獲得的功能幾乎相同。

你可以在這裏看到一些細節,例如: http://www.infinitezest.com/articles/using-sqlite-from-shell-in-android.aspx

至於「沒有這樣的表」的情況下 - 這真的取決於你在哪裏存儲數據庫。您可以選擇(在數據庫創建時)存儲數據庫的位置 - 它可能是您的應用程序所在的內部/數據/數據(通常)文件夾,或者您可能(錯誤地)在緩存空間創建它 - 緩存可以在任何只要Android的操作系統發現它需要更多的空間,所以這可以解釋爲什麼你的數據庫消失了。

另一種可能性是,不是重新安裝應用程序,而是卸載它並分兩步安裝。卸載應用程序還會刪除應用程序的所有專用數據(在大多數電話上,但不是全部),而重新安裝應用程序(例如,通過單擊在Eclipse中運行)不會刪除數據。無論如何 - 在您的應用程序的onCreate中,您應該重新創建包含所有表的數據庫 - 如果您發現它尚未創建,則始終應該重新創建 - 因爲您永遠不知道是否在第一次或隨後的時間運行應用程序。

0

請明確鏈接到您引用的示例。 我理解它的方式是,在啓動時創建自己的數據庫,除非數據庫已經存在於設備上,在這種情況下,數據庫創建將被跳過。正確?

如果這是正確的,那麼只需要在每次更新數據庫設計(要刪除舊數據庫,舊錶名等)並重新安裝時卸載該應用程序,以便數據庫用新的表名重新創建。

否則,您將有更新的應用程序代碼,嘗試使用過時的數據庫。

3

我遇到同樣的問題。我正在更改版本號,卸載應用程序等......最後,這是由於我沒有提交SQL調用的事務。爲清晰起見,下面的答案可能是值得的 - https://stackoverflow.com/a/13568419/1634369