繁体   English   中英

无法从Android读取SQLite表

[英]Unable to read SQLite table from Android

我正在尝试在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中获取数据。

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/

从屏幕快照中,您似乎可以看到资产目录中的colors.db。

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

我敢肯定,其他人或稍稍使用Google搜索功能可以帮助您进一步解决此问题。

您正在创建数据库,然后要从中访问表。 您也不需要创建表吗? 我建议你使用SQLiteOpenHelper代替openOrCreateDatabase这样你就不会遇到这个问题。
如果您想通过assets访问现有数据库(如您在屏幕截图中所见),则可以引用SQLiteException:没有这样的表

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM