0

我需要实现一种算法来访问数据库以检查最后一个元素以计算新元素。当然,第一次是不可能的,因为数据库是空的,我得到

IndexOutOfBoundsException) index 0 requested with a size of 0

为了避免这种情况,我尝试检查 if cursor.getCount==0,然后引入默认的第一个元素。问题是,即使我将它存储在数据库中,它cursor.getCount仍然是0. 这是我的方法的代码:

public Measures getLastMeasure(String date) {
    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.query(TABLE_MEASURES, new String[] { KEY_ID,
            KEY_DATE, KEY_TIME_HOUR, KEY_TIME_MINUTE, KEY_BE_INTAKE,
            KEY_GLUCOSE, KEY_BOLUS, KEY_BASAL }, KEY_DATE + "=?",
            new String[] { date }, null, null, KEY_TIME_HOUR + " DESC, "
                    + KEY_TIME_MINUTE + " DESC", "1");
    if (cursor.getCount() == 0) {
        Measures m = new Measures("nodate", 0, 0, 0, 0, 0, 0);
        return m;
    } else {
        if (cursor != null)
            cursor.moveToFirst();

        Measures m = new Measures(Long.parseLong(cursor.getString(0)), // id
                cursor.getString(1), // date
                Integer.parseInt(cursor.getString(2)), // timeHour
                Integer.parseInt(cursor.getString(3)), // timeMinute
                Double.parseDouble(cursor.getString(4)), // BE intake
                Double.parseDouble(cursor.getString(5)), // glucose
                Double.parseDouble(cursor.getString(6)), // bolus
                Double.parseDouble(cursor.getString(7)) // basal

        );
        // return m
        return m;
    }
}

我希望你能帮助我。在此先感谢大家。

4

2 回答 2

0

看起来您的查询没有返回与您的搜索匹配的数据。如果您只想要按日期列出的最新数据,我建议您使用order by KEY_DATE descand limit 1,或者max(KEY_DATE)代替KEY_DATE + "=?"

旁注:无需检查 if cursoris nullSQLiteDatabase#query从不返回 null Cursor),无论如何您的检查都是无用的,因为cursor即使它是null. 你也没有关闭Cursor.

于 2013-08-27T20:46:32.170 回答
0

我可能遗漏了一些东西,但该代码对我来说看起来是正确的。您确定您要查找的数据实际上在数据库中,并且您传递给 getLastMeasure() 的参数是正确的吗?

于 2013-08-27T20:37:05.160 回答