我正在使用数据库来存储日期,并希望根据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
所以我的问题是:如何检查是否有结果?或者我是否需要检查给定的序列是否是数据库中的序列号?
答案 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
}