1

我有一个这样的 Android SQLite 表定义:

create table MyTable(..., myDate integer, ...);

稍后在我的代码中,我查询此表以通过游标检索 myDate 的值:

long dateInstant = cursor.getLong(cursor.getColumnIndexOrThrow("myDate"));

但是,我想知道这是否是最好的方法。如果未设置该值(即数据库中的 null),则上述方法返回 0,这恰好也是一个有效值。我需要区分有效值和空值。此外,来自 javadoc 的getLong

当列值为 null、列类型不是整数类型或整数值超出范围 [Long.MIN_VALUE, Long.MAX_VALUE] 时,结果以及此方法是否引发异常由实现定义。

这似乎表明,如果我没看错的话,在未来的某个时候,Android 中发布的 SQLite 实现可能会选择抛出异常而不是返回 0。我正在寻找跨 Android 版本的一致解决方案。

简而言之,如何以一种允许我区分有效值和空值的方式稳健地处理从列中检索整数数据?

4

1 回答 1

8

你可以做

long dateInstant  = 0; // some value to represent null
if (!cursor.isNull (colIndex))
  dateInstance = cursor.getLong (colIndex);
于 2013-11-15T00:38:33.903 回答