检查Cursor是否包含行结果?

时间:2017-04-21 20:03:51

标签: android mysql

我在检查游标是否包含任何结果方面遇到了很多麻烦。

我有一种"删除"来自给定表的所有行都在这里:

  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

3 个答案:

答案 0 :(得分:0)

如果您想知道与查询约束匹配的行数,请将COUNT(*)添加到SELECT语句中:

SELECT COUNT(*), SUM(whatever) FROM other_thing;

然后,通过CursormoveToFirst()移至第一行,并检查两个值(计数为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();

如果游标读取了某些内容,它将返回至少一个,否则将返回零。