1

車両が最後に燃料を補給された日時を記録したテーブルを含むデータベースがあります。整数型の日付列があります。

どちらが最後の燃料補給日であったかを判断できる必要があります。使ってます:

Cursor cursor = db.query(FUEL_USE_TABLE_NAME, LAST_FUEL_UP_DATE_CLAUSE,
            REGISTRATION_NO_COLUMN + "=? ", new String[]{registrationNumber}, 
            null, null, null);

ここLAST_FUEL_UP_DATE_CLAUSEMAX(date_time)date_timeは問題の列の名前です。

これは、テーブルにエントリがある場合は正常に機能しますが、単体テストを記述しているときに、テーブルにエントリがない場合はカーソルの行数がゼロになると予想しましたが、代わりに値がゼロの単一行を取得します。date_timeつまり、実際には値がないのに、列の最大値はゼロです。

私はこれを回避してコーディングできてうれしいですが(0の代わりにレコードがないことを示すために使用-1)、これが予期される動作であるかどうか、または何か間違ったことをしているのかどうかを知りたいです。

4

1 に答える 1

1

予想通りの動作のようです。

ここでSQLiteのドキュメントを参照してください

具体的には次のように述べています。

max(X)

max()集計関数は、グループ内のすべての値の最大値を返します。最大値は、同じ列のORDERBYの最後に返される値です。グループにNULL以外の値がない場合にのみ、Aggregate max()はNULLを返します。

于 2012-06-21T12:38:15.687 に答える