2012-04-11 58 views
5

我正在使用數據庫來存儲日期,並希望根據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 

所以我的問題是:如何檢查是否有結果?或者我需要檢查給出的序列是否是數據庫中的序列?

回答

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

遊標沒有行,它是空的,但上面的測試仍然失敗,爲什麼?還有其他支票嗎?這真是莫名其妙。 – Namratha 2013-03-19 05:56:40

+2

注意:這具有將光標設置到第一個位置的副作用。如果將已移動到特定位置的遊標對象傳遞給另一個函數,然後期望仍處於該位置,則會導致問題:) – 2015-06-01 20:40:56

2

您可以檢查光標元素:

boolean isEmpty = cursor.getCount() < 1; 

據我所知,在沒有行所請求的條件,就返回一個空指針光標從不返回null。

+1

只有異常工作檢查不適用於我。有沒有其他方法可以做到這一點? – Faas 2012-04-11 15:08:42

4

如果仔細觀察,錯誤是SQL錯誤。 它將g作爲列讀取。你必須用'g'這樣的撇號包起來。

在你的情況,你在哪裏得到的光標應該行:

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

至於檢查光標是否一直沒有結果,看看薩米爾Mangroliya的回答。

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 
}