次のような Android SQLite テーブル定義があります。
create table MyTable(..., myDate integer, ...);
コードの後半で、このテーブルにクエリを実行して、カーソルを介して myDate の値を取得します。
long dateInstant = cursor.getLong(cursor.getColumnIndexOrThrow("myDate"));
ただし、これが最善のアプローチであるかどうかは疑問です。値が設定されていない場合 (つまり、データベースで null の場合)、上記のメソッドは 0 を返しますが、これもたまたま有効な値です。有効な値と null 値を区別する必要があります。また、のjavadocからgetLong
:
結果と、列の値が null の場合、列の型が整数型でない場合、または整数値が [Long.MIN_VALUE, Long.MAX_VALUE] の範囲外の場合に、このメソッドが例外をスローするかどうかは、実装によって定義されます。
これは、私がこれを正しく読んだ場合、将来のある時点で、Android に同梱されている SQLite 実装が 0 を返すのではなく、例外をスローすることを選択する可能性があることを示唆しているようです。Android のバージョン間で一貫したソリューションを探しています。
要するに、有効な値と null を区別できる方法で、列からの整数データの取得を確実に処理するにはどうすればよいでしょうか?