游标中无法解释的空值

时间:2013-09-26 12:33:14

标签: android sqlite

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

    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();

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

database table as viewed in SQLite Database Browser

输出结果为:

 >>>>> 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的建议我改为使用

String [] 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!

2 个答案:

答案 0 :(得分:1)

dumpCursor()无法打印非字符串列值。 Internally它只是尝试get the column value使用Cursor.getString(),它可以为非字符串列类型返回null:

  

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

解决方案:请勿使用dumpCursor(),而是根据需要实施自己的日志记录。

答案 1 :(得分:0)

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