0

我正在执行以下代码...

    SQLiteDatabase db = getReadableDatabase();
    SQLiteQueryBuilder querything = new SQLiteQueryBuilder();
    String sqlTables = "ZSITESUSES";
    String [] sqlSelect = { "ZUSE_ID"};
    querything.setTables(sqlTables);
    Cursor cursor = querything.query(db, sqlSelect, "ZSITE_ID=1014", null,null, null, null);
    DatabaseUtils.dumpCursor(cursor);
    cursor.moveToFirst();

在数据库上,如下面的数据库浏览器所示(数据库查看器有一个故障,它没有正确显示下划线 - 请忽略):

在 SQLite 数据库浏览器中查看的数据库表

输出是:

 >>>>> Dumping cursor android.database.sqlite.SQLiteCursor@41e679b0
 0 {
    ZUSE_ID=null
 }
 1 {
    ZUSE_ID=null
 }
 2 {
    ZUSE_ID=null
 }
 <<<<<

我对数据库非常缺乏经验。光标包含三个组件的事实看起来是正确的,但“ZUSE_ID=null”对我来说看起来是错误的。如果我执行 cursor.getString(0) 答案是 null 这绝对是错误的。

有任何想法吗?

编辑:根据 njzk2 的建议,我改为使用

字符串 [] sqlSelect = { "ZSITE_ID","ZUSE_ID","ZUSE_PERCENT","ZSITEUSE_ID" };

然后相应的输出是:

 >>>>> Dumping cursor android.database.sqlite.SQLiteCursor@41ba4570
 0 {
    ZSITE_ID=1014
    ZUSE_ID=null
    ZUSE_PERCENT=10
    ZSITEUSE_ID=null
 }
 1 {
    ZSITE_ID=1014
    ZUSE_ID=null
    ZUSE_PERCENT=30
    ZSITEUSE_ID=null
 }
 2 {
    ZSITE_ID=1014
    ZUSE_ID=null
    ZUSE_PERCENT=70
    ZSITEUSE_ID=null
 }
 <<<<<

编辑:这太奇怪了,我决定卸载并重新安装我的应用程序 - 瞧瞧 - 一切都开始完美运行...... arrrggghh!

4

2 回答 2

1

dumpCursor()不一定能打印非字符串列值。在内部,它只是尝试使用可以为非字符串列类型返回 null的列值:Cursor.getString()

当列值为 null 或列类型不是字符串类型时,结果以及此方法是否引发异常是实现定义的。

解决方案:不要使用dumpCursor()但根据需要实施您自己的日志记录。

于 2013-09-26T12:59:00.070 回答
0

我决定卸载并重新安装我的应用程序 - 你瞧 - 一切都开始完美运行。

于 2013-10-28T15:53:28.700 回答