【问题标题】:Android programming sqlite database sorting query by String value to listviewAndroid编程sqlite数据库通过String值排序查询到listview
【发布时间】:2013-01-28 15:06:34
【问题描述】:

我有一个查询,它使用 where 子句根据 Day 值从 sqlite 数据库获取数据,我得到的数据是“星期一”,然后将这些数据填充到列表视图中。除此之外,我想按时间升序对数据进行排序,以形成一个列表,其中包含从最早到最晚开始时间的周一所有事件。

按天查询:

public Cursor getMonday () {
String Monday = "Monday";
return db.query(
    DATABASE_TABLE,
    new String[] { KEY_ID, KEY_LESSON, KEY_DAY, KEY_START, KEY_END, KEY_LOCATION}, 
    KEY_DAY + "=?", 
    new String[] {Monday},
    null, null, null);
}

我试过了:

public Cursor getMonday () {
    String Monday = "Monday";
    return db.query(DATABASE_TABLE, 
        new String[] {KEY_ID, KEY_LESSON, KEY_DAY, KEY_START,KEY_END, KEY_LOCATION},
        KEY_DAY + "=?", 
        new String[] {Monday}, 
        null, null, null, 
        KEY_START + " ASC");
  }

这通常会起作用,但我想 WHERE 子句和 order by 的顺序不正确,我不知道如何使它们一致地工作。有人可以建议吗?谢谢。

这是我得到的错误:

01-28 14:24:02.738: E/AndroidRuntime(1672): FATAL EXCEPTION: main
01-28 14:24:02.738: E/AndroidRuntime(1672): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.unischeduler/com.example.unischeduler.ScheduleActivity}: java.lang.IllegalArgumentException: invalid LIMIT clauses:Start ASC

【问题讨论】:

    标签: android sqlite sql-order-by where-clause


    【解决方案1】:

    你的参数顺序不正确,试试这个:

     public Cursor getMonday () {
    
     String Monday = "Monday";
    
     return db.query(DATABASE_TABLE, 
             new String[] {KEY_ID, KEY_LESSON, KEY_DAY, KEY_START,
                            KEY_END, KEY_LOCATION}, KEY_DAY + "=?", 
        new String[] {Monday}, null, null, KEY_START + " ASC", null);
    
      }
    

    编辑建议按 hh:mm 格式订购:

    看看SQLite Date and Time Functions,也许你可以尝试(我还没有测试过)这样的东西:

     return db.query(DATABASE_TABLE, 
             new String[] {KEY_ID, KEY_LESSON, KEY_DAY, KEY_START,
                            KEY_END, KEY_LOCATION}, KEY_DAY + "=?", 
        new String[] {Monday}, null, null, "strftime('%H:%M', " + KEY_START + ")", null);
    

    【讨论】:

    • 如果您使用 Eclipse,只需将鼠标指针放在query 上,您将看到该方法的每个参数的顺序和名称^^
    • 谢谢这解决了我的错误并且我的程序编译虽然只是输入一些测试值列表项的顺序似乎不正确,例如它按值 10、13、17 的顺序显示记录然后8. 如果我按 DESC 顺序尝试,我会从前 8、17、13 名然后是 10 名,我不知道为什么?
    • 不客气……那么您可以将我的答案标记为正确答案,不是吗?关于排序问题,请记住 SQLite 并不像 MySQL 那样原生支持日期,在 SQLite 中,您实际上存储的是字符串,而不是日期实例。所以问题是:您存储的日期格式是什么?
    • 我明白了,我将它们以 hh:mm 格式存储为 24 小时制。因此,当前的测试值如下所示:8:00、13:00、17:00、10:00 等您建议如何更正此问题?
    猜你喜欢
    • 2014-08-28
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多