我已按照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浏览器中查看它。)
答案 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
希望这会有所帮助:)