【问题标题】:Unable to get datas from the past two months using sqlite query使用 sqlite 查询无法获取过去两个月的数据
【发布时间】:2017-02-04 14:32:11
【问题描述】:

我使用以下代码获取过去两个月的数据。

 public List<String> getDates() {
        SQLiteDatabase db       = this.getReadableDatabase();
        List<String>   dateList = new ArrayList<>();

        String query = "SELECT DISTINCT " + KEY_PROGRESSDATE + " FROM " + TABLE_ENTRY + " WHERE progressdate >= date('now','start of month','-1 month') AND progressdate < date('now','start of month') desc";

        Cursor c = db.rawQuery(query, null);
        if (c.getCount() > 0) {
            while (c.moveToNext()) {
                dateList.add(c.getString(0));
            }
        }
        return dateList;
    }

但我收到以下错误消息..

引起:android.database.sqlite.SQLiteException:在“desc”附近: 语法错误(代码 1):,编译时:SELECT DISTINCT progressdate FROM entry WHERE progressdate >= date('now','start of month','-1 month') AND progressdate

为什么会这样?

【问题讨论】:

  • 试试这个SELECT DISTINCT progressdate FROM entry WHERE progressdate >= date('now','start of month','-1 month') AND progressdate

标签: android database sqlite android-studio cursor


【解决方案1】:

对于这个异常,你必须写ORDER BY "Columname" DESC

这里是这样的

SELECT DISTINCT progressdate FROM entry WHERE progressdate >= date('now','start of month','-1 month') AND progressdate < date('now','start of month') ORDER BY progressdate desc

查看example here

【讨论】:

  • 如果这解决了您的问题,请您接受作为答案吗?@Learner
【解决方案2】:

嘿,如果函数已经存在,为什么要使用原始查询。尝试以下函数从任何表中获取值,只需在其中传递您的参数:

public String[] getValues(boolean b, String table, String column,
                              String where, String orderBy) {
        ArrayList<String> savedAns = new ArrayList<String>();
        Cursor result = null;
        String[] y;
        try {
            result = db.query(b, table, new String[]{column}, where, null,
                    null, null, orderBy, null);
            if (result.moveToFirst()) {
                do {
                    savedAns.add(result.getString(result.getColumnIndex(column)));
                } while (result.moveToNext());
            } else {
                return null;
            }
            y = savedAns.toArray(new String[result.getCount()]);
        } finally {
            result.close();
        }
        return y;
    }

希望对你有帮助..

【讨论】:

    【解决方案3】:

    您没有在查询中使用任何 Order By 子句。也许您正在尝试将进度日期按降序排列?

    String query = "SELECT DISTINCT " + KEY_PROGRESSDATE + " FROM " + TABLE_ENTRY + " WHERE progressdate >= date('now','start of month','-1 month') AND progressdate < date('now','start of month') ORDER BY progressdate desc";
    

    【讨论】:

      猜你喜欢
      • 2019-10-15
      • 1970-01-01
      • 2020-04-28
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多