我试图在android中打开一个SQLite数据库,数据库在sqlite浏览器中工作正常,但android没有读到有问题的表存在。下面是我正在修改的代码。
public String setColorName() {
String colorName = null;
try {
db = this.openOrCreateDatabase("colors.db",MODE_WORLD_READABLE, null);
Cursor cursor = db.rawQuery("SELECT colorName FROM Colors WHERE RGB = '000000'", null);
if (cursor != null) {
if (cursor.moveToFirst()){
do {
colorName = cursor.getString(cursor.getColumnIndex("colorName"));
}while (cursor.moveToNext());
}
} else {
colorName = "woops";
}
} catch (NumberFormatException e) {}
return colorName ;
}
我在几个论坛上发现了很多关于这个问题的文章(包括stackoverflow)但是 问题我似乎没有解决他们的解决方案。我正试图从代码中拉出RGB和colorname(上面的查询只是一个测试导致的),这样我就可以使用每个部分上的欧几里德距离公式来估计最近的RGB。为了做到这一点,我需要能够至少从表中获取数据:P。
logcat的:
I/Database(12748): sqlite returned: error code = 1, msg = no such table: Colors
D/AndroidRuntime(12748): Shutting down VM
W/dalvikvm(12748): threadid=1: thread exiting with uncaught exception (group=0x4
0015560)
E/AndroidRuntime(12748): FATAL EXCEPTION: main
E/AndroidRuntime(12748): android.database.sqlite.SQLiteException: no such table:
Colors: , while compiling: SELECT colorName FROM Colors WHERE RGB = '000000'
E/AndroidRuntime(12748): at android.database.sqlite.SQLiteCompiledSql.nat
ive_compile(Native Method)
E/AndroidRuntime(12748): at android.database.sqlite.SQLiteCompiledSql.com
pile(SQLiteCompiledSql.java:92)
E/AndroidRuntime(12748): at android.database.sqlite.SQLiteCompiledSql.<in
it>(SQLiteCompiledSql.java:65)
E/AndroidRuntime(12748): at android.database.sqlite.SQLiteProgram.<init>(
SQLiteProgram.java:83)
E/AndroidRuntime(12748): at android.database.sqlite.SQLiteQuery.<init>(SQ
LiteQuery.java:49)
E/AndroidRuntime(12748): at android.database.sqlite.SQLiteDirectCursorDri
ver.query(SQLiteDirectCursorDriver.java:42)
E/AndroidRuntime(12748): at android.database.sqlite.SQLiteDatabase.rawQue
ryWithFactory(SQLiteDatabase.java:1356)
E/AndroidRuntime(12748): at android.database.sqlite.SQLiteDatabase.rawQue
ry(SQLiteDatabase.java:1324)
最后,这是一张SQLite浏览器的图片,显示该查询可以在该数据库上运行 SQLiteBrowser Query
如果图片没有放弃,我将colors.db存储在资产中。
好吧,看起来我已经解决了这个问题。我需要从资产中复制数据库,然后从那里打开它。我最终使用我在下面链接中找到的信息创建了一个数据库助手,我得到了数据库以停止返回该错误,尽管我现在需要完成其余的应用程序。非常感谢所有伟大的建议,大家! http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/
答案 0 :(得分:2)
从屏幕截图中可以看出资产目录中有colors.db。
虽然我不确定如何从那里加载SQLite数据库,但我确实知道默认情况下SQLiteDatabase
android帮助程序对象读取和写入应用程序的受保护数据文件夹。所以你的openOrCreateDatabase
方法正在调用一个创建。但是它会对查询进行轰炸,因为这个新建的数据库中没有这个表。
我确信其他人或有点谷歌搜索可以帮助解决这个问题。
答案 1 :(得分:1)
您正在创建数据库,之后您希望从中访问该表。你不需要创建表吗?我建议您使用SQLiteOpenHelper代替openOrCreateDatabase
,这样您就不会遇到这个问题
如果您想通过assets
访问现有数据库(正如我在屏幕截图中看到的那样),您可以参考SQLiteException: no such table