2012-04-11 39 views
5

Tôi đang sử dụng cơ sở dữ liệu để lưu trữ ngày và muốn một cột đơn được trả lại dựa trên id nào được đưa ra trong vị trí đó.Kiểm tra xem con trỏ có kết quả

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; 

} 

Mã này hoạt động nếu tôi sử dụng một sê-ri nằm trong cơ sở dữ liệu nhưng nó cho tôi lực khi tôi đang sử dụng bộ nối tiếp không có trong cơ sở dữ liệu!

nó nói:

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 

Vì vậy, câu hỏi của tôi là: Làm thế nào để kiểm tra xem có kết quả? hoặc tôi cần phải kiểm tra nếu nối tiếp được đưa ra là một nối tiếp có trong cơ sở dữ liệu?

Trả lời

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

Con trỏ không có hàng, nó trống nhưng các thử nghiệm ở trên vẫn không thành công, tại sao vậy? Có kiểm tra nào khác không? Điều này thực sự khó hiểu. – Namratha

+2

Lưu ý: điều này có tác dụng phụ của việc đặt con trỏ đến vị trí đầu tiên. Có thể gây ra sự cố nếu truyền đối tượng con trỏ đã được di chuyển đến vị trí cụ thể đến một hàm khác và sau đó được mong đợi vẫn ở vị trí :) –

2

Bạn có thể kiểm tra xem con trỏ có yếu tố:

boolean isEmpty = cursor.getCount() < 1; 

AFAIK, Cursor không bao giờ trả về null khi không có hàng mà các điều kiện yêu cầu, chỉ cần trả về một con trỏ rỗng.

+1

Chỉ ngoại lệ làm việc kiểm tra không hoạt động đối với tôi. Không có cách nào khác để làm điều này? – Faas

4

Nếu bạn nhìn kỹ, lỗi là SQL bị lỗi. Nó đọc các g như một cột. Bạn phải mã hóa nó trong các dấu nháy đơn như vậy 'g'.

Trong trường hợp của bạn, dòng nơi bạn sẽ có được con trỏ nên là:

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

Như để kiểm tra xem con trỏ không có kết quả, nhìn vào câu trả lời Samir Mangroliya của.

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 
} 
Các vấn đề liên quan