Android数据库访问问题

时间:2016-01-28 15:59:48

标签: android sqlite android-sqlite

我目前正在尝试从程序外部填充的SQLite数据库中读取数据,但是每当我尝试访问应该在数据库中的表时,我都会发现表找不到错误。

获得问题的代码。

public Question getQuestion(int id,String category) {
   String path = DB_PATH + DB_NAME;
   SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY);

    Cursor cursor = database.query(selectTable(category), new String[]
                    {KEY_ID, KEY_QUESTION, KEY_ANSWER1, KEY_IMAGE},
            KEY_ID + "=?" + new String[]{String.valueOf(id)}, null, null, null, null);
    if (cursor != null) {
        cursor.moveToFirst();
    }
    Question question = new Question(Integer.parseInt(cursor.getString(0)), cursor.getString(1),
            cursor.getString(2),Uri.parse(cursor.getString(3)));

    database.close();
    cursor.close();
    return question;
}

从SQL文件复制数据库。

 private void copyDB() 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();

}

任何人都可以想到原因吗?我似乎认为我正在访问错误的数据库但是我应该只有一个数据库存在,如果我首先没有数据库我会有一个不同的错误。

关于发生什么以及如何解决问题的想法?

在运行调试器并按照建议检查数据库后,我发现数据库实际上是null。所以我猜我在复制文件时做错了什么?

    private void copyDB() 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();
}

1 个答案:

答案 0 :(得分:0)

看起来您没有将database设置为打开的文件。改变这一行:

SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY);

database = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY);

我还建议使用SQLiteHelper对象,如Saving Data in SQL Databases中所述。这提供了一些为您打开阅读数据库的机制。