java - 选择sqlite android

标签 java android sql sqlite android-sqlite

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

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;
}

enter image description here

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

SELECT * FROM table_person

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

最佳答案

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

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

然后使用推荐且安全的方式传递 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;
}

关于java - 选择sqlite android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65293146/

相关文章:

java - 如何使用 HTTPURLConnection 和 put 方法创建目录。它总是创建一个文件而不是目录

java - Android - 动态加载系统库没有确切的路径?

JavaFx 陷入 while 循环

java - Android 在 2 个 Activity 之间传递 Intent 增量值

Java Android - ViewPager fragment 加载

MySQL IF...THEN 后跟查询语句

SQL Server Rank() 按组

java - 将数据值作为整数类型而不是字符串写入 CSV 有哪些优点?

java - Java 中的线程和事件处理

sql - MySQL 添加总计列