2012-04-11 5 views
5

Я использую базу данных для хранения даты и хочу, чтобы возвращался единственный столбец, на основе которого id указывается в where claus.Проверьте, есть ли у курсора результаты

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

+2

Примечание: это имеет побочный эффект установки курсора в первую позицию. Может возникнуть проблема при передаче объекта курсора, который был перенесен в определенную позицию на другую функцию, а затем, как ожидается, все еще будет в позиции :) –

2

Вы можете проверить, если курсор имеет элементы:

boolean isEmpty = cursor.getCount() < 1; 

AFAIK, курсор никогда не возвращает NULL, если нет строки, которые запрашиваемые условия, просто возвращают пустой курсор.

+1

Только Исключение сработало, проверка не работает для меня. Разве нет другого способа сделать это? – Faas

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 
} 
Смежные вопросы