3

我在 Eclipse 中制作了一个 Adnroid 程序,它读取 csv 文件并将信息输入到 SQLite 数据库中,并使用

dbCursor = database.query(DATABASE_TABLE, new String[]{KEY_ROWID, KEY_ITEMTYPE, KEY_QUANTITY},  null, null, null, null, null);  

    int iRow = dbCursor.getColumnIndex(KEY_ROWID);
    int iType = dbCursor.getColumnIndex(KEY_ITEMTYPE);
    int iQuantity = dbCursor.getColumnIndex(KEY_QUANTITY);

        for(dbCursor.moveToFirst(); !dbCursor.isAfterLast(); dbCursor.moveToNext()){
            allData = allData + " " + dbCursor.getString(iRow) + "\t " + dbCursor.getString(iType) + "\t\t\t " + dbCursor.getString(iQuantity) + "\n";      
        }

然后在 textview 框中打印出 allData 效果很好。

然后我想用

dbCursor = database.rawQuery("SELECT KEY_ROWID , SUM(KEY_ITEMTYPE) FROM DATABASE_TABLE GROUP BY KEY_ROWID", null);          
for(dbCursor.moveToFirst(); !dbCursor.isAfterLast(); dbCursor.moveToNext()){

    allDataSum = allDataSum + " " + dbCursor.getString(0);
} //I know this will probably not print what I want correctly but that's a problem for another day

当我尝试打印此内容时,我收到错误“10-25 22:06:35.016: I/Database(1911): sqlite returned: error code = 1, msg = no such table: DATABASE_TABLE”。

然后我打开 DDMS 文件资源管理器并将数据库复制到我的桌面上,然后尝试使用命令工具查看数据库,但再次出现错误,“SQL 错误:没有这样的表:库存”。

当数据库中显然没有表时,模拟器如何向我显示我想从 .query()(但不是从 .rawQuery)中看到的内容?关于我使用查询和 rawQuery 的一切都是相同的,所以这不是不为 rawQuery 或类似的东西打开数据库的情况。

4

2 回答 2

1

您似乎正在使用名为 DATABASE_TABLE、KEY_ROWID 和 KEY_ITEMTYPE 的静态变量,其中包含您的实际名称。当您将它与 rawQuery 一起使用时,您必须这样做

dbCursor = database.rawQuery("SELECT " + KEY_ROWID + ", SUM(" + KEY_ITEMTYPE + ") FROM " + DATABASE_TABLE + " GROUP BY " + KEY_ROWID, null);

请注意,当您使用database.query引号中没有这些变量进行查询时,这就是它起作用的原因。

于 2012-10-25T23:37:32.150 回答
0

不确定 SUM() 聚合是否给您带来麻烦,但您可以使用 sqlite 命令行和“.tables”命令仔细检查表的存在:

sqlite3 DATABASE
SQLite version 3.7.8 2011-09-19 14:49:19
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sql>.tables
于 2012-10-25T23:37:28.777 回答