2012-04-11 41 views
5

Tarihi saklamak için bir veritabanı kullanıyorum ve hangi anahtarın nerede verildiğine bağlı olarak tek bir sütunun döndürülmesini istiyorum. Ben veritabanında bir seri kullanırsanızİmlecin sonuçları olup olmadığını kontrol edin

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; 

} 

Bu kod çalıştığı ama veritabanında değil bir seri kullanıyorum zaman bana bir kuvvet yakın verir!

diyor:

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 

Benim soru yani: sonuç varsa nasıl kontrol edebilirim? veya verilen dizinin veritabanında bulunan bir seri olup olmadığını kontrol etmem gerekiyor mu?

boolean isEmpty = cursor.getCount() < 1; 

afaik istenen koşullar, sadece boş İmleç dönmek hiçbir satır olduğunda İmleç asla null döndürür: İmleç unsurları varsa

cevap

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

İmleç satır içermiyor, boş ama yukarıdaki testler hala başarısız oluyor, neden bu? Başka çek var mı? Bu gerçekten şaşırtıcı. – Namratha

+2

Not: Bu, imleci ilk konuma ayarlamanın yan etkisine sahiptir. Belirli bir konuma başka bir işleve taşınmış bir imleç nesnesini geçirdikten sonra bir soruna neden olabilir ve sonra hala bu konumda olması beklenir :) –

2

kontrol edebilirsiniz.

+1

Yalnızca Özel Durum çalıştı, çek benim için çalışmıyor. Bunu yapmanın başka yolu yok mu? – Faas

4

Eğer yakından bakarsanız, hata SQL'in hatalı olmasıdır. g bir sütun olarak okur. 'g' gibi apostrophes içinde onu kaplamak zorunda. Senin durumunda

, imlecin olmalıdır almak satır: imleç sonuç olup olmadığı kontrol gelince

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

Samir Mangroliya verdiği cevaba bak.

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 
} 
İlgili konular