2014-02-10 39 views
1

我試圖從我的SD卡加載數據庫文件,但是發出異常。 下面是例外無法以讀取/寫入模式打開數據庫

org.sqlite.database.sqlite.SQLiteException: not an error (code 0): Could not open the database in read/write mode. 

這裏是我的代碼:

public void csr_test_1() throws Exception 

{

DB_PATH=new File("/storage/sdcard1/sk2.db"); 
    SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(DB_PATH, null); 
    String res = ""; 


Cursor c = db.rawQuery("SELECT synsetid, w2.lemma FROM sense LEFT JOIN word AS w2 ON w2.wordid=sense.wordid WHERE sense.synsetid IN (SELECT sense.synsetid FROM word AS w1 LEFT  JOIN sense ON w1.wordid=sense.wordid WHERE w1.lemma='"+ "life" + "') AND w2.lemma<>'" + "life" + "'", null); 
if(c!=null){ 
boolean bRes; 
for(bRes=c.moveToFirst(); bRes; bRes=c.moveToNext()){ 
String x = c.getString(0); 
res = res + "." + x; 
} 
}else{ 
} 
test_result("csr_test_1.1", res, ".one.two.three"); 

db.close(); 
test_result("csr_test_1.2", db_is_encrypted(), "unencrypted"); 
} 

這些許可我使用

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="com.android.vending.BILLING" /> 

![enter image description here][1] 
![enter image description here][2] 

請幫助我出去...謝謝小號

This is the path in sdcard

+0

你檢查你的權限讀取/寫入外部存儲? –

+1

您是否在您的Manifest文件中添加了<使用權限android:name =「android.permission.WRITE_EXTERNAL_STORAGE」/>' – CRUSADER

+0

Hi hi crusader 我已經添加了我的AndroidMainfest.xml的權限 仍然無法正常工作,它工作正常與模擬器,但是當我在設備中運行它顯示一個exceptoion。 – Yushi

回答

0

此權限添加到您的AndroidManifest.xml

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

+0

我已經添加了我的AndroidMainfest的權限。XML 還是它不工作 – Yushi

3

這個例外是,如果sqlite3_db_readonly() returns non-zero拋出。它能如果

  • 數據庫文件是隻讀返回非零值,或

  • 數據庫文件不存在。

Reference

你有一個硬編碼路徑"/storage/sdcard1/sk2.db" - 這可能是數據庫中不存在那裏。使用來自Environment的變量來訪問您的外部存儲器而不是硬編碼路徑。

+0

喜laalto它在仿真器工作正常,但是當我在設備運行此其表演的exception.Database在那個特定的路徑 – Yushi

+0

在DDMS文件瀏覽器截圖存在,所有用戶的權限設置:' ---- rwxr-x'而不是例如'-rwxrwxr-x'。 – laalto

0

請在清單文件

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

同時使用許可,如果你仍然得到你甚至包括後此錯誤:

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

,你也實施運行權限那麼幾乎可以肯定是一個問題與Android從外部SD卡管理文件的方式有關。欲瞭解更多信息點擊這裏查看我的回答:

https://stackoverflow.com/a/46383795/1502079