无法从Android读取SQLite表

时间:2011-06-25 15:34:30

标签: java android database sqlite

我试图在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/

2 个答案:

答案 0 :(得分:2)

从屏幕截图中可以看出资产目录中有colors.db。

虽然我不确定如何从那里加载SQLite数据库,但我确实知道默认情况下SQLiteDatabase android帮助程序对象读取和写入应用程序的受保护数据文件夹。所以你的openOrCreateDatabase方法正在调用一个创建。但是它会对查询进行轰炸,因为这个新建的数据库中没有这个表。

我确信其他人或有点谷歌搜索可以帮助解决这个问题。

答案 1 :(得分:1)

您正在创建数据库,之后您希望从中访问该表。你不需要创建表吗?我建议您使用SQLiteOpenHelper代替openOrCreateDatabase,这样您就不会遇到这个问题 如果您想通过assets访问现有数据库(正如我在屏幕截图中看到的那样),您可以参考SQLiteException: no such table