gpt4 book ai didi

java - 无法从 Android 读取 SQLite 表

转载 作者:搜寻专家 更新时间:2023-10-30 22:19:12 26 4
gpt4 key购买 nike

我正在尝试在 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 和颜色名称(上面的查询只是一个测试),以便我可以在每个部分上使用欧氏距离公式来估计最近的 RGB。为此,我至少需要能够从表中获取数据:P。

日志:

    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 存储在 Assets 中。

抱歉,篇幅太长了,我尽量做到全面,并真诚地感谢所有帮助我的人。

好的,看来我已经解决了这个问题。我需要从 Assets 中复制数据库,然后从那里打开它。我最终使用我在下面的链接中找到的信息制作了一个数据库助手,并且我让数据库停止返回该错误,尽管我现在需要完成应用程序的其余部分。非常感谢大家的宝贵建议! http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

最佳答案

从您的屏幕截图看来,您的 Assets 目录中有 colors.db。

虽然我不确定如何从那里加载 SQLite 数据库,但我知道默认情况下 SQLiteDatabase android 帮助程序对象读取和写入应用程序的 protected 数据文件夹。所以您的 openOrCreateDatabase 方法正在调用创建。但它会在查询中爆炸,因为该表不存在于这个新创建的数据库中。

我相信其他人或稍微谷歌一下可以帮助进一步解决这个问题。

关于java - 无法从 Android 读取 SQLite 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6478732/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com