无法以读/写模式打开数据库

时间:2014-02-10 09:54:47

标签: android sqlite android-sqlite

我正在尝试从我的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

5 个答案:

答案 0 :(得分:3)

如果sqlite3_db_readonly() returns non-zero,则抛出此异常。如果

,它可以返回非零值
  • 数据库文件是只读的,或

  • 数据库文件不存在。

Reference

你有一个硬编码路径"/storage/sdcard1/sk2.db" - 那里可能没有数据库。使用Environment中的变量来访问外部存储而不是硬编码路径。

答案 1 :(得分:0)

将此权限添加到AndroidManifest.xml

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

答案 2 :(得分:0)

请使用清单文件中的两个权限

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

答案 3 :(得分:0)

如果您包含以下内容后仍然出现此错误:

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

并且您还实现了运行时权限,然后它几乎肯定是与Android管理外部SD卡文件的方式相关的问题。有关更多信息,请在此处查看我的答案:

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

答案 4 :(得分:0)

如果您的sdk> N,则必须请求这样的读写权限

ActivityCompat.requestPermissions(this,
            new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE},
            1);