【问题标题】:Select sqlite android选择sqlite android
【发布时间】:2021-03-25 08:04:12
【问题描述】:

我有一个带有条件的查询,但它返回一个空结果,即使我有与这些条件匹配的数据。我是初学者,所以我不确定这个查询是否正确。

public Cursor raw() {    
    SQLiteDatabase db = this.getReadableDatabase();
    String select = "SELECT * FROM table_person WHERE data >= " + SelecionarPeriodo.dataInicial + " AND " + "data <=" + SelecionarPeriodo.dataFinal;

    Cursor res = db.rawQuery( select, new String[]{});
    Log.i("String", select);

    return res;
}

如果我删除此条件并使用如下查询

SELECT * FROM table_person

我有与我要获取的日期相对应的结果和列。

【问题讨论】:

  • data 字段的数据类型是什么?
  • 数据为文本类型
  • 什么是SelecionarPeriodo.dataInicial 和SelecionarPeriodo.dataFinal?
  • SelecionarPeriodo.dataInicial 和 SelecionarPeriodo.dataFinal 是带有数据文本的字符串

标签: java android sql sqlite android-sqlite


【解决方案1】:

您编写查询的方式实际上是将列data 与0 进行比较,因为像14/12/2020 这样的值被视为包含数字14、12 和@ 之间的除法的表达式987654326@ 结果为 0。

如果你想在 SQLite 中比较日期,你必须使用类似 YYYY-MM-DD 这样的可比较格式,这是 SQLite 唯一有效的文本日期格式。
因此,如果您以任何其他格式将日期存储在 data 列中,您最好将其更改为 YYYY-MM-DD。
您还必须对参数SelecionarPeriodo.dataInicial 和SelecionarPeriodo.dataFinal 使用相同的格式,这将与data 进行比较。

然后使用推荐且安全的方式传递rawQuery()的第二个参数中的参数:

public Cursor raw() {    
    SQLiteDatabase db = this.getReadableDatabase();
    String select = "SELECT * FROM table_person WHERE data >= ? AND data <= ?" + ;
    Cursor res = db.rawQuery(select, new String[]{SelecionarPeriodo.dataInicial, SelecionarPeriodo.dataFinal});
    Log.i("String", select);
    return res;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 2014-12-21
    • 1970-01-01
    相关资源
    最近更新 更多