android P中的sqlite数据库错误“没有这样的表”

时间:2018-06-01 08:27:31

标签: android sqlite android-9.0-pie

我正在使用SQLiteOpenHelper从资产中读取数据库。它适用于所有Android版本,但android p。

这是我的copyDataBase函数:

 private static void copyDataBase() throws IOException {
        InputStream myInput = myContext.getAssets().open(DB_NAME);
        String outFileName = DB_PATH + DB_NAME;
        OutputStream myOutput = new FileOutputStream(outFileName);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer))>0){
            myOutput.write(buffer, 0, length);
        }
        myOutput.flush();
        myOutput.close();
        myInput.close();
        SharedPreferences shData = myContext.getSharedPreferences("data", 0);
        SharedPreferences.Editor editor = shData.edit();
        editor.putBoolean("databaseIsOnMemory", true);
        editor.commit();
    }

我在这个函数中写了一个日志,它确实经历了它。 但我得到这个错误:

android.database.sqlite.SQLiteException: no such table: irancell (code 1 SQLITE_ERROR)

这就是我获取数据的方式:

c = myDataBase.query(true, Table_Name, new String[] {IDData,TextData},
    null,null,null,null,null, null);
c.moveToFirst();
int i = 1;
while(!c.isAfterLast()){
    list.add(new KharidBaste(c.getInt(0),c.getString(5)));
    c.moveToNext();
    i++;
}

并且错误在线:“c.moveToFirst();”

2 个答案:

答案 0 :(得分:4)

在createDB函数中,必须在this.getReadableDatabase()之后添加this.close()

this.getReadableDatabase();
this.close();

This link can help you

答案 1 :(得分:-2)

检查数据库中的表名。可能会有所不同。并记住表名称区分大小写。例如,表名称Employee和employee不相同。所以检查表名。