SQLite表不存在现有SQLite数据库(和表)的异常

时间:2011-02-07 02:30:42

标签: android sqlite

我已按照here给出的说明将现有的SQLite数据库引入您的Android应用。

当我查询表“android_metadata”时,这很好。但是,当我在自己的表上运行类似的查询“单词”(主要整数键有_id)时,我得到一个表不存在异常并且应用程序崩溃。

为什么?

代码:

Cursor c = myDatabase.query("android_metadata", null, null, null, null, null, null, null);

有效但

Cursor c = myDatabase.query("words", null, null, null, null, null, null, null);

返回一个表不存在异常。

这就是我创建数据库的方式(对路径和文件名的引用是正确的):

private void copyDatabase() throws IOException
{
    //Open local db as the input stream
    InputStream myInput = mContext.getAssets().open(DB_NAME);

    //Path to the just created empty db
    String outFileName = DB_PATH + DB_NAME;

    //Open the empty db as the output stream
    OutputStream myOutput = new FileOutputStream(outFileName);

    //Transfer bytes from the inputfile to the outputfile
    byte[] buffer = new byte[1024];
    int length = 0;
    while ((length = myInput.read(buffer))>0){
        myOutput.write(buffer, 0, length);
    }

    //Close the streams
    myOutput.flush();
    myOutput.close();
    myInput.close();
}

(注意:在我看来,桌子就在那里。我正在SQLite浏览器中查看它。)

2 个答案:

答案 0 :(得分:3)

你正在追踪一只红鲱鱼。无论如何,都会在每个android数据库中创建android_metadata表。

确定问题的真正机制是在模拟器中运行您的应用程序并检出数据库。如果您的模拟器正在运行且应用程序已设置数据库,请运行:

adb shell
cd /data/data/your.application.package/databases
ls

如果ls显示您期望的数据库名称,请运行:

sqlite3 <your db file>

在sqlite3提示符下运行:.schema

这将打印出数据库的表格。我的猜测是你只会找到元数据表,因为android实际上并没有从你的外部位置读取你的数据库。如果是这样,请回复评论,我可以尝试帮助您完成整个过程。

答案 1 :(得分:0)

您可以尝试使用SQLiteHelpter创建数据库。 它检查是否存在,如果不存在,则不需要额外的努力就可以。

我已经在其他问题上发布了一个例子,请在此处查看:
Android - Sqlite database method undefined fot type

希望这会有所帮助:)