当SQLiteDatabase.rawQuery()工作正常时,SQLiteDatabase.query()出现问题

时间:2017-05-03 19:41:09

标签: java android sqlite

我有问题在Android中查询我的SQLITE数据库。我有一个名为“重置”的表,其中包含一些值。目前我只有一个条目。

reset_timestamp | interval
1479442048      | 5

这是我试图执行的查询。但是,当我调用cursor.getCount()时,它返回零结果。我想要执行的查询是:

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()做错了什么?

1 个答案:

答案 0 :(得分:0)

"1479442048"是一个字符串(你甚至在它前面写了String)。字符串和数字不相等。

query函数仅支持字符串参数,因此您必须将字符串转换回数字:

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

或者,将数字直接插入查询中:

query(..., "reset_timestamp=1479442048", null, ...);