ดัชนีเคอร์เซอร์ Android อยู่นอกข้อยกเว้นที่ถูกผูกไว้

มีอะไรผิดปกติกับรหัสนี้ ฉันต้องการค้นหาข้อมูลโดยใช้บาร์โค้ด และมันแสดงให้ฉันเห็นว่า Cursor Index อยู่นอกข้อยกเว้นที่ถูกผูกไว้

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 แหล่งที่มา


คำตอบ (3)


ไม่มีผลลัพธ์ใน Cursor คุณควรตรวจสอบว่า moveToFirst() ใดส่งคืน (มีแนวโน้มมากที่สุดคือ false) นอกจากนี้ คุณควรใช้ moveToNext() ไม่ใช่ moveToFirst() ระวังด้วยว่าคุณไม่ได้ตรวจสอบพารามิเตอร์ ss สิ่งนี้อาจนำไปสู่ช่องโหว่ของการแทรก SQL คุณควรใช้พารามิเตอร์ ฉันคิดว่าคุณสามารถใช้ผลตอบแทนครั้งเดียวในวิธีการของคุณได้

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

วรรณกรรมของเมธอด moveToFirst() :

บูลีนนามธรรมสาธารณะ moveToFirst () เลื่อนเคอร์เซอร์ไปที่แถวแรก วิธีนี้จะคืนค่าเท็จหากเคอร์เซอร์ว่างเปล่า

ส่งคืน ไม่ว่าการย้ายจะสำเร็จหรือไม่

ดังนั้นการโทร moveToFirst ของคุณล้มเหลว (เนื่องจากเคอร์เซอร์มี 0 องค์ประกอบ) และนั่นคือสาเหตุของการขัดข้อง

ทำเช่นนี้:

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

ลองสิ่งนี้

String id;
if (c!= null && c.moveToNext){
   String id = c.getString(0);
   return id;   
 }
person Srikanth Roopa    schedule 13.07.2013
comment
การใช้เวลาที่นี่สักพักก็ไม่สมเหตุสมผล id จะได้รับองค์ประกอบสุดท้ายเสมอ ไม่ต้องพูดถึง id ไม่สามารถเข้าถึงได้จากนอกวง... - person m0skit0; 13.07.2013