首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法从Android读取SQLite表

无法从Android读取SQLite表
EN

Stack Overflow用户
提问于 2011-06-25 23:34:30
回答 2查看 1.7K关注 0票数 1

我正尝试在安卓系统中打开一个SQLite数据库,该数据库在sqlite浏览器中运行良好,但安卓系统没有读取到有问题的表存在。下面是我正在修改的代码。

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
    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/

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-25 23:54:59

您正在创建数据库,然后您希望从该数据库访问该表。您不需要同时创建表吗?我建议你使用SQLiteOpenHelper而不是openOrCreateDatabase,这样你就不会遇到这个问题。

如果您想通过assets访问现有数据库(正如我在您的屏幕截图中看到的那样),您可以参考SQLiteException: no such table

票数 1
EN

Stack Overflow用户

发布于 2011-06-25 23:52:40

从您的屏幕截图可以看出,您的assets目录中有colors.db。

虽然我不确定如何从那里加载SQLite数据库,但我知道在默认情况下,SQLiteDatabase android helper对象会对应用程序的受保护数据文件夹进行读写。因此,您的openOrCreateDatabase方法调用的是create。但它会在查询中崩溃,因为这个新创建的数据库中不存在该表。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6478732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档