1

次のような 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 を区別できる方法で、列からの整数データの取得を確実に処理するにはどうすればよいでしょうか?

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 に答える