0

空(不为空!)我想这样创建 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 是通过 cursor 传递的,是 null。我将数据库复制到 sd 卡并通过SQLiteManager插件查看它到 FF -0 所有数据都存在并且上面的语句在控制台中工作,所以我的 sql 语句出现了一些问题。

你能告诉我这是错的吗?

更新扩展问题

我存储了一些数据,其中的日期列保存为:

  1. 2012-11-30 09:12:29.392 哪个模式 yyyy-MM-dd HH:mm:sS
  2. 将其转换为 long 并将其保存为我表中的 TEXT 类型的列
  3. 所以我得到了类似的东西 1354197364633

我想在两个值之间获取数据库中哪个日期的行:

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

AndroidrawQuery获取String参数数组,并将它们作为字符串传递给数据库,因此您的Date列中的值将与两个字符串进行比较。

如果您yyyy-mm-dd...在数据库中使用了字符串,它就会起作用。

您可以使用如下查询将参数强制回整数:

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

原因是我的应用程序的逻辑问题:在对数据库的请求之间的某个帧中,这些行已经更新,所以我没有得到我的日期。

于 2012-12-03T06:27:24.550 回答