2014-02-10 38 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