如何在SQLite数据库中处理可为空的整数列

Chr*_*ght 0 sqlite android nullable

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

create table MyTable(..., myDate integer, ...);
Run Code Online (Sandbox Code Playgroud)

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

long dateInstant = cursor.getLong(cursor.getColumnIndexOrThrow("myDate"));
Run Code Online (Sandbox Code Playgroud)

但是,我想知道这是否是最佳方法.如果未设置该值(即数据库为null),则上述方法返回0,这恰好也是有效值.我需要区分有效值和空值.另外,从javadoc getLong:

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

这似乎表明,如果我正确地读到这一点,那么在未来的某个时刻,Android中提供的SQLite实现可能会选择抛出异常而不是返回0.我正在寻找跨Android版本的一致解决方案.

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

Per*_*man 6

你可以做

long dateInstant  = 0; // some value to represent null
if (!cursor.isNull (colIndex))
  dateInstance = cursor.getLong (colIndex);
Run Code Online (Sandbox Code Playgroud)