2012-03-29 222 views
2

這可能是一個愚蠢的問題,但我仍然需要知道它的確切答案。當我們爲特定的應用程序創建數據庫並在真實設備上部署該應用程序時,系統創建的數據庫在哪裏?在內部存儲或SD卡上?如果它在默認情況下位於內部存儲器上,我們是否可以將其轉移到SD卡上,因爲應用程序可能會由於內存不足和數據庫大小增加而崩潰。我有一個帶有9列的表格的數據庫。哪裏會存儲數據庫的正確位置?Sqlite數據庫存儲

+0

我認爲谷歌會是所有上述問題的最佳答案您是否在發佈之前嘗試搜索? – Deva 2012-03-29 12:40:29

+0

您將它保存到數據庫中的記錄數量是多少? – 2012-03-29 12:41:22

+1

是的,我沒有谷歌周圍,但擁抱得到相關的答案。 現在我沒有插入表中的記錄負載。但我擔心的是,當記錄數量很多時,我的應用程序將會如何運作。它會崩潰/沒有迴應/不會參賽等。所以我問這個問題。 – 2012-03-29 14:34:10

回答

7

如果你不使用SQLiteOpenHelper創建數據庫時提供任何特定的路徑,那麼它會(默認)將其存儲在設備的內存中:

數據/數據/ app_package_name /數據庫/ dbFilename

但是,您也可以在創建數據庫時提供自己的路徑/位置,例如在ContextWrapper

/*creating database in SD card under app's cache directory*/ 
context.openOrCreateDatabase(context.getExternalCacheDir() + "/dbFileName", 
          Context.MODE_PRIVATE, null); 
+0

所以如果數據庫默認在內部存儲器中,不會妨礙我的應用程序的性能,因爲內部存儲器不夠大...? – 2012-03-29 14:37:15

+1

事實上,使用內部存儲器時性能會更好,因爲在SD卡上讀取和寫入需要額外的時間(取決於卡的類別)。除非您的應用程序不生成數千條記錄,否則內部內存不應該成爲一般用途或中級應用程序的問題。您可以通過查看**設置**下的**應用程序**來跟蹤您的應用程序緩存。作爲參考,我創建了一個包含近100000條記錄的字典(包括primary_key auto_increment ID字段和其他許多額外的語法信息),並且它在SQLite中花費了近6MB的空間 – waqaslam 2012-03-29 16:41:28

1

嘗試getDatabasePath(http://developer.android.com/reference/android/content/ContextWrapper.html)。如果您處於「活動」或「應用程序」類中,請嘗試:

文件dbFile = getDatabasePath(MY_DB_NAME); Log.i(dbFile.getAbsolutePath());

編輯

也看到在這個 /數據/數據/ PACKNAME /數據庫/

+0

您的查詢已解決? – Goofy 2012-03-29 12:50:44

+0

我的擔心是我的應用程序在將來的行爲如何,當記錄數量很多時。它會崩潰/沒有迴應/不會參賽作品等。所以我需要一些指導,我該如何去我的數據庫維護.. – 2012-03-29 14:35:21

+0

檢查了這一點http://forums.zotero.org/discussion/11180/ – Goofy 2012-03-30 04:38:15

0

我面臨着回答您的問題崩潰了類似的問題。我將薑餅移植到我的自定義系統中,並需要使用SQLITE數據庫。這是默認情況下,「Waqas」以前說過。由於我使用的代碼是由其他人編寫的,所以我不知道所有這些,而且我總是在日誌中記錄一些SQLite錯誤。我的內部閃光燈空間有限,我不知道自己用光了。我的應用程序正在從服務器下載信息只是報告下載沒有成功。通過不同的日誌,我發現發生了一些SQLITE錯誤,但沒有告訴我「磁盤已滿」。我想這對於Android應用程序級別來說太低了。希望它能回答你關於崩潰的問題。系統不會崩潰,但您的應用程序將受到影響。

0

在應用程序存儲器,則可以在數據/數據/ PKGNAME /數據庫/ mydb.db

0

它存儲在/數據分區內部存儲的保存它,但它通常是不可訪問沒有超級用戶(root)權限。