我在检查游标是否包含任何结果方面遇到了很多麻烦。
我有一种"删除"来自给定表的所有行都在这里:
Chevron.class
public void deleteAllRecords(){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_NAME,null,null);
}
然后我调用一个方法,它添加数据库第一行的SUM,它位于:
public Cursor getRecalculate(){
SQLiteDatabase db = this.getWritableDatabase();
Cursor res = db.rawQuery("select SUM (" + SECOND_FIELD + ") FROM " + TABLE_NAME, null);
return res;
}
我的主要问题是,如果我从数据库中删除所有记录,res.getCount()仍然等于1但不包含任何信息,但该方法只返回1行。所以我一直坚持如何检查游标是否有实际的表数据或只是空表数据。
我尝过像
这样的东西if(res.getString(0) == null){
.. Do code
}
但这不起作用。
我收到错误:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.ceri.twostep_onecheck/com.example.ceri.twostep_onecheck.ShowGraph}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
答案 0 :(得分:0)
如果您想知道与查询约束匹配的行数,请将COUNT(*)
添加到SELECT
语句中:
SELECT COUNT(*), SUM(whatever) FROM other_thing;
然后,通过Cursor
将moveToFirst()
移至第一行,并检查两个值(计数为getInt(0)
,总和为getInt(1)
。
答案 1 :(得分:0)
使用getReadableDatabase()
代替getWritableDatabase()
。
试试这个:
public Cursor getRecalculate() {
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("select SUM (" + SECOND_FIELD + ") FROM " + TABLE_NAME, null);
return res;
}
阅读cursor
值:
// Move the cursor to the first row if cursor is not empty
if(res.moveToFirst())
{
do
{
// Do something with cursor
}while(res.moveToNext()); // Move cursor to next row until it pass last entry
}
// Close
res.close();
希望这会有所帮助〜
答案 2 :(得分:0)
尝试一下
cursor.getCount();
如果游标读取了某些内容,它将返回至少一个,否则将返回零。