androidsqliteandroid-cursor

Android Cursor Index out of Bound Exception


is there any thing wrong with this code, i want to query for data by using barcode and it show me that Cursor Index out of Bound exception .

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;
}

Solution

  • No results in the Cursor. You should check what moveToFirst() is returning (most likely false). Also you should use moveToNext(), not moveToFirst(). Also watch out that you're not checking ss parameter. This could lead to SQL injection vulnerabilities. You should be using parameters. Also I think you can use a single return in your method.

    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;
    }