检查光标是否有结果

时间:2012-04-11 14:47:54

标签: android sqlite

我正在使用数据库来存储日期,并希望根据where claus中给出的id返回单个列。

    public String getPmax(String serial) {

    String[] columns = new String[]{KEY_SERIAL, KEY_PMAX};      
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, "serial = " + serial,
    null, null, null, null);

    String result = "nothing found";

    if(c != null) {

        int iPmax = c.getColumnIndex(KEY_PMAX); 

        c.moveToFirst();
        result = c.getString(iPmax);

    }

    return result;  

}

如果我使用数据库中的序列,但是当我使用不在数据库中的序列时,它会强制关闭此代码!

它说:

04-11 16:31:19.423: E/AndroidRuntime(21226): java.lang.RuntimeException: Unable to start activity ComponentInfo{nl.janjanus.solardetect/nl.janjanus.solardetect.DatabaseView}: android.database.sqlite.SQLiteException: no such column: g: , while compiling: SELECT serial, pmax FROM SolareCel WHERE serial = g

所以我的问题是:如何检查是否有结果?或者我是否需要检查给定的序列是否是数据库中的序列号?

4 个答案:

答案 0 :(得分:37)

    if (!(mCursor.moveToFirst()) || mCursor.getCount() ==0){
     //cursor is empty
}

答案 1 :(得分:4)

如果仔细观察,错误是SQL有问题。 它将g作为列读取。你必须把它包含在像'g'这样的撇号中。

在您的情况下,获取光标的行应为:

Cursor c = ourDatabase.query(DATABASE_TABLE, columns, "serial = '" + serial + "'",
    null, null, null, null);

关于检查光标是否没有结果,请看Samir Mangroliya的答案。

答案 2 :(得分:2)

您可以检查Cursor是否包含元素:

boolean isEmpty = cursor.getCount() < 1;

AFAIK,当没有请求条件的行时,Cursor永远不会返回null,只返回一个空的Cursor。

答案 3 :(得分:0)

int x = cursor.getCount(); //this will return number of records in current cursor
if ( x == 0 ) {
     // there are no records
} else {
    // do your stuff
}