2011-07-21 42 views
5

我想在我的SD卡上創建一個數據庫。每當我打電話SQLiteDatabase.openOrCreateDatabase我得到的錯誤:Android打開或創建數據庫

07-21 13:33:17.587: ERROR/AndroidRuntime(5541): Caused by: android.database.sqlite.SQLiteException: unable to open database file

有誰知道什麼可能會導致此?這裏是代碼我有我的數據庫類的open()方法:

File sdcard = Environment.getExternalStorageDirectory(); 

String dbfile = sdcard.getAbsolutePath() + File.separator+ "external_sd" + File.separator + Schema.DATABASE_NAME ; 

db = SQLiteDatabase.openOrCreateDatabase(dbfile, null); 
+1

作爲一個側面說明,你爲什麼要寫數據庫到SD卡,而不是/數據/數據? –

+0

如果數據中出現錯誤,我希望能夠爲用戶提供支持。我實際上是從SQL Server數據庫中提取數據,所以我希望能夠檢測和處理任何意外的數據。我想我可以創建一些類來從私有存儲中導入和導出數據庫。 – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

回答

8

在這一個可能的故障可能是因爲您沒有設置相應的權限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

但是存儲數據上SD卡被認爲是不安全的。因爲每個有權在sd存儲上存儲數據的應用程序都可以訪問數據庫。

編輯:另一個可能的問題是外部存儲可能不可用。您需要確保您的外部存儲器目前可寫入。一種方法是通過getExternalStorageState來確定狀態(參見參考here)。

getExternalStorageState() returns MEDIA_SHARED if the media is present not mounted, and shared via USB mass storage. 

Reference。在這裏檢查狀態也有一個stackoverflow帖子:Writing Text File to SD Card fails

+0

我已經在清單文件中設置了該權限集。這是針對非市場應用程序的,所以我不擔心其他應用程序試圖訪問我的數據。 – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

+0

Environment.getExternalStorageState()==共享 – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

+0

這就是你的問題@ ==共享 – fyr