Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android:SQLite查询中的条件间问题_Android_Sqlite_Between - Fatal编程技术网

android:SQLite查询中的条件间问题

android:SQLite查询中的条件间问题,android,sqlite,between,Android,Sqlite,Between,我有一个具有如下模式的表: db.execSQL("CREATE TABLE TBL_REMINDERS (" // + "FLD_YEAR INTEGER, " // + "FLD_MON INTEGER, " // + "FLD_DATE INTEGER, " // + "FLD_HOUR INTEGER, " //

我有一个具有如下模式的表:

        db.execSQL("CREATE TABLE TBL_REMINDERS (" //
                + "FLD_YEAR INTEGER, " //
                + "FLD_MON INTEGER, " //
                + "FLD_DATE INTEGER, " //
                + "FLD_HOUR INTEGER, " //
                + "FLD_MIN INTEGER, " //
                + "FLD_EVENT TEXT" //
                + ")" //
其中FLD_MON字段在范围[1,12]内,FLD_DATE[1,31],FLD_HOUR[0,23],FLD_MIN[0,59] 对下表的rawQuery不返回任何结果集:

public List<Reminder> getRemindersBetween(int y1, int m1, int d1, int h1, int min1, int y2, int m2, int d2, int h2,
        int min2) {
    String sql = "SELECT FLD_YEAR, FLD_MON, FLD_DATE, FLD_HOUR, FLD_MIN, FLD_EVENT FROM TBL_REMINDERS "//
            + "WHERE (100000000 * FLD_YEAR + 1000000 * FLD_MON + 10000 * FLD_DATE + 100 * FLD_HOUR + FLD_MIN BETWEEN ? AND ?) " //
            + "ORDER BY FLD_YEAR, FLD_MON, FLD_DATE, FLD_HOUR, FLD_MIN, FLD_EVENT ";
    SQLiteDatabase db = null;
    Cursor cur = null;
    try {
        db = new CalendarDBOpenHelper(context).getReadableDatabase();
        cur = db.rawQuery(sql, new String[] { "" + (100000000 * y1 + 1000000 * m1 + 10000 * d1 + 100 * h1 + min1),//
                "" + (100000000 * y2 + 1000000 * m2 + 10000 * d2 + 100 * h2 + min2 - 1) //
        });
        List<Reminder> list = new ArrayList<Reminder>();
        while (cur.moveToNext()) {
            int year = cur.getInt(0);
            int mon = cur.getInt(1);
            int date = cur.getInt(2);
            int hour = cur.getInt(3);
            int min = cur.getInt(4);
            String event = cur.getString(5);
            list.add(new Reminder(year, mon, date, hour, min, event));
        }

        return list;
    } finally {
        if (null != cur) {
            try {
                cur.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        if (null != db) {
            try {
                db.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

以及

        cur = db.rawQuery(sql, new String[] { "" + (10 * y), "" + m, "" + d });

然后我什么也得不到好的首先:它们肯定不一样

第一个返回特定时间范围内的匹配项。
第二个返回月、年和日期具有给定值的条目

编辑


请尝试使用大括号表示表达式,因此
(10*FLD_YEAR)

谢谢您的推荐。首先,我承认它们不一样。其次,它不是时间戳,而是整数形式的YYYYMMDDHHMM表示。你能解释一下这是怎么错的吗?你是对的。没想到那个水槽。我脑子里有一个时间戳,你的计算实际上并不代表这个时间戳。我撤销了我的声明。我编辑了我的问题,请看一下。我对SQLite没有什么经验,也不知道为什么。有什么建议吗?使用大括号没什么区别。仍然没有结果集
            + "WHERE FLD_YEAR=? AND FLD_MON=? AND FLD_DATE=? " //
            + "WHERE 10 * FLD_YEAR=? AND FLD_MON=? AND FLD_DATE=? " //
        cur = db.rawQuery(sql, new String[] { "" + (10 * y), "" + m, "" + d });