2017-05-03 13 views
1

AndroidでSQLiteデータベースのクエリに問題があります。私はいくつかの値を "リセット"と呼ばれるテーブルがあります。現在、私は1つのエントリしか持っていません。SQLiteDatabase.rawQuery()が正常に動作した場合のSQLiteDatabase.query()の問題

reset_timestamp | interval 
1479442048  | 5 

これは実行しようとしたクエリです。ただし、cursor.getCount()を呼び出すと結果は0になります。実行するクエリは次のとおりです。

SELECT reset_timestamp FROM resets WHERE (reset_timestamp=1479442048); 

私は本当にrawQuery()を使用したくありません。私はquery()を使いたいです。ここに私の質問文があります。

SQLiteDatabase db = new PowerDbHelper(this).getWritableDatabase(); 
String[] resetsQueryColumns = {"reset_timestamp"}; 
String[] resetsQuerySelectArgs = {"1479442048"}; 

Cursor cursor = db.query("resets", resetsQueryColumns, "reset_timestamp=?", 
       resetsQuerySelectArgs, null, null, null); 

ただし、getCount()はこれを0と返します。一方、これは正常に動作し、私の結果を返します

cursor = db.rawQuery("select reset_timestamp from resets where (reset_timestamp=1479442048)", null); 

getCount()は1を返します。 '?'の前後に引用符を付ける私に与えます

java.lang.IllegalArgumentException: Cannot bind argument at index 1 because the index is out of range 

私はquery()に間違っていますか?

+0

そして私をgetCount()を参照してください、私はcursor.getCount()を参照しています。 – kernel

答えて

0

"1479442048"は文字列です(あなたもその前にStringを書きました)。文字列と数字は等しくありません。

あなたはバックナンバーに文字列を変換する必要がありますのでquery関数は、文字列のみのパラメータをサポートしています。また

query(..., "reset_timestamp=CAST(? AS INT)", ...); 

を、クエリに直接番号を挿入します。

query(..., "reset_timestamp=1479442048", null, ...); 
関連する問題