0

空(nullではありません!)次のようにSQLステートメントを作成したい:

SELECT * FROM table WHERE date BETWEEN ? AND ? ORDER BY date ASC LIMIT 1

私はこれとしてデータベースにSQLを持っています^

            Cursor cursor = context.getContentResolver().query(
                    URI, 
                    new String[] { col_id, col_2,DATE }, 
                    DATE + " BETWEEN ? AND ?" , 
                    new String[] {dateAsString, stopDate)} ,
                    DATE + " ASC LIMIT 1");

        cursor = database.query(
                table, projection, 
                selection, selectionArgs, 
                null, null, sortOrder);

SQL はカーソルによって渡されますが null です。データベースをSDカードにコピーし、SQLiteManagerプラグインを介してFF -0に表示します。すべてのデータが存在し、上記のステートメントがコンソールで機能するため、SQLステートメントに何かが詰まっています。

それが間違っていることを教えてもらえますか?

UPDATE拡張質問

次のように保存された日付列を持つデータをいくつか保存します。

  1. 2012-11-30 09:12:29.392 パターン yyyy-MM-dd HH:mm:sS
  2. これを long に変換し、テーブルの TEXT タイプの列に保存します
  3. だから私はそのようなものを得ました 1354197364633

2つの値の間のデータベースの日付の行を取得したい:

database.rawQuery("SELECT * FROM Track WHERE Date BETWEEN ? AND ?", selectionArgs);

しかし、私はそれに成功しませんでした。これで、どのデータベースでも機能しないことがわかりましたが、解決策はありません。私の問題を解決する方法を教えていただけますか?

以下の解決策を使用しようとします。したがって、カーソルで次のクエリを取得します。

SQLiteQuery: SELECT * FROM Track WHERE Date BETWEEN CAST(? AS INT) AND CAST(? AS INT)

mBindArgs で次のパラメーターを使用します。

{1=1354248261841, 2=1354262663195}

トラックの日付値を確認すると、それらの間に配置されますが、カーソルはまだ空のままです。

4

2 に答える 2

1

AndroidはパラメーターrawQueryの配列を取得し、Stringそれらを文字列としてデータベースに渡すため、列の値がDate2 つの文字列と比較されます。

yyyy-mm-dd...データベースで文字列を使用していた場合は、機能していたはずです。

次のようなクエリを使用して、パラメーターを強制的に整数に戻すことができます。

SELECT * FROM Track WHERE Date BETWEEN CAST(? AS INT) AND CAST(? AS INT)
于 2012-11-30T09:35:31.210 に答える