2012-04-11 18 views
5

Używam bazy danych do przechowywania daty i chcę zwrócić pojedynczą kolumnę na podstawie tego, który id jest podany w miejscu claus.Sprawdź, czy kursor ma wyniki

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; 

} 

Ten kod działa, jeśli używam seryjny, który znajduje się w bazie danych, ale to daje mi siłę, gdy blisko używam seryjny, który nie znajduje się w bazie danych!

mówi:

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 

Więc moje pytanie brzmi: w jaki sposób mogę sprawdzić, czy jest wynik? lub czy muszę sprawdzić, czy dany serial jest numerem seryjnym, który znajduje się w bazie danych?

Odpowiedz

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

Kursor nie ma wierszy, jest pusty, ale powyższe testy wciąż kończą się niepowodzeniem, dlaczego tak jest? Czy jest jeszcze jakiś inny czek? To naprawdę kłopotliwe. – Namratha

+2

Uwaga: ma to skutek uboczny polegający na ustawieniu kursora na pierwszej pozycji. Może powodować problem, jeśli przekazuje obiekt kursora, który został przeniesiony do określonej pozycji, do innej funkcji, a następnie oczekuje, że nadal będzie na pozycji :) –

2

Można sprawdzić, czy kursor elementy:

boolean isEmpty = cursor.getCount() < 1; 

AFAIK, kursor nie zwraca null gdy nie ma rząd, który wnioskowane warunki, po prostu zwraca pusty kursora.

+1

Tylko działający wyjątek czek nie działa. Czy nie ma innego sposobu, aby to zrobić? – Faas

4

Jeśli przyjrzeć się bliżej, błąd jest taki, że SQL jest uszkodzony. To czyta g jako kolumnę. Musisz zamknąć go w apostrofach, tak jak to 'g'.

W twoim przypadku, linia, gdzie można uzyskać kursor powinien być:

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

chodzi o sprawdzenie, czy kursor nie ma wyników, spójrz na odpowiedź Samir Mangroliya użytkownika.

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 
} 
Powiązane problemy