我需要实现一个访问数据库的算法来检查最后一个元素以便计算新的元素。当然,第一次这是不可能的,因为数据库是空的,我得到
IndexOutOfBoundsException) index 0 requested with a size of 0
为了避免这种情况,我尝试检查是否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;
}
}
我希望你能帮助我。在此先感谢大家。
答案 0 :(得分:0)
我可能会遗漏一些东西,但那段代码对我来说是正确的。您确定您要查找的数据实际上是在数据库中吗?您传递给getLastMeasure()的参数是否正确?
答案 1 :(得分:0)
您的查询看起来没有返回与您的搜索匹配的数据。如果您只想按日期获取最新数据,我建议order by KEY_DATE desc
和limit 1
,或max(KEY_DATE)
代替KEY_DATE + "=?"
附注:无需检查cursor
null
是否SQLiteDatabase#query
(Cursor
永远不会返回空cursor
),无论如何,您的支票无用,因为您正在访问null
,即使它是Cursor
。你也没有关闭{{1}}。