【问题标题】:Issue with SQLiteDatabase.query() when SQLiteDatabase.rawQuery() works fine当 SQLiteDatabase.rawQuery() 工作正常时出现 SQLiteDatabase.query() 问题
【发布时间】:2017-05-03 19:41:08
【问题描述】:

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

reset_timestamp | interval
1479442048      | 5

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

SELECT reset_timestamp FROM resets WHERE (reset_timestamp=1479442048);

我真的不想使用 rawQuery()。我想使用查询()。这是我的查询语句。

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

【问题讨论】:

  • 当我提到 getCount() 时,我指的是 cursor.getCount()。

标签: java android sqlite


【解决方案1】:

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

query 函数只支持字符串参数,所以你必须将字符串转换回数字:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    相关资源
    最近更新 更多