6

我正在使用数据库来存储日期,并希望根据 where 子句中给出的 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

4 回答 4

39
    if (!(mCursor.moveToFirst()) || mCursor.getCount() ==0){
     //cursor is empty
}
于 2012-04-11T14:58:05.497 回答
4

如果仔细观察,错误是 SQL 有问题。它读取g为一列。你必须像这样用撇号把它包起来'g'

在您的情况下,您获得光标的行应该是:

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

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

于 2012-04-11T15:06:30.610 回答
2

您可以检查光标是否有元素:

boolean isEmpty = cursor.getCount() < 1;

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

于 2012-04-11T14:51:49.543 回答
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
}
于 2013-10-02T05:05:31.630 回答