Indeks Kursor Android di luar Pengecualian Terikat

apakah ada yang salah dengan kode ini, saya ingin menanyakan data dengan menggunakan kode batang dan itu menunjukkan kepada saya bahwa Indeks Kursor di luar Batas pengecualian.

public String getIdByBarcode(String ss) throws SQLException{
    String[] column = new String[]{Pro_ID,Pro_Barcode, Pro_Name,Pro_NameKhmer, Pro_Quantity, Pro_Price, Pro_Description, Pro_Date};
    Cursor c = ourDatabase.query(TABLE_NAME, column, Pro_Barcode + "= '" + ss + "' " , null, null, null, null);

    if(c != null){
        c.moveToFirst();
        String id = c.getString(0);
        Log.v(id, id + "Id" );
        return id;
    }
    return null;
}

person user2149618    schedule 13.07.2013    source sumber


Jawaban (3)


Tidak ada hasil di Cursor. Anda harus memeriksa apa yang moveToFirst() kembalikan (kemungkinan besar false). Anda juga harus menggunakan moveToNext(), bukan moveToFirst(). Berhati-hatilah juga agar Anda tidak memeriksa parameter ss. Hal ini dapat menyebabkan kerentanan injeksi SQL. Anda harus menggunakan parameter. Saya juga pikir Anda dapat menggunakan satu pengembalian dalam metode Anda.

public String getIdByBarcode(String ss) throws SQLException {
    String[] column = new String[]{Pro_ID,Pro_Barcode, Pro_Name,Pro_NameKhmer, Pro_Quantity, Pro_Price, Pro_Description, Pro_Date};
    final String args = new String[1];
    args[0] = ss;
    Cursor c = ourDatabase.query(TABLE_NAME, column, Pro_Barcode + " = ?" , args, null, null, null);
    String ret = null;
    if(c.moveToNext()) {
        ret = c.getString(0);     
    }
    return ret;
}
person m0skit0    schedule 13.07.2013

Literatur metode moveToFirst():

public abstract boolean moveToFirst () Pindahkan kursor ke baris pertama. Metode ini akan mengembalikan nilai false jika kursor kosong.

Mengembalikan apakah perpindahan berhasil.

Jadi panggilan moveToFirst Anda gagal (karena kusrsor memiliki 0 elemen) dan itulah alasan crash.

Melakukan hal ini:

if(c != null && c.moveToFirst()) {
    String id = c.getString(0);
    Log.v(id, id + "Id" );
    return id;
}
person Rajeev    schedule 13.07.2013

coba ini

String id;
if (c!= null && c.moveToNext){
   String id = c.getString(0);
   return id;   
 }
person Srikanth Roopa    schedule 13.07.2013
comment
Menggunakan while di sini tidak masuk akal. id akan selalu mendapatkan elemen terakhir. Belum lagi id tidak dapat diakses dari luar loop... - person m0skit0; 13.07.2013