错误:CursorIndexOutOfBoundsException:请求索引0,大小为0

时间:2014-01-22 10:01:04

标签: android sqlite cursor

Hy Guys,我是Android初学者。我需要你的帮助。我想将数据插入sqlite tblorder和orderdtl的2个表中。在orderdtl我必须从listview插入多个项目的数据。我尝试烘烤我要插入的所有变量。他们全都出现了。但是当我试图保存它。我得到那些错误。 这是我的DBDataSource.java

public order createorder(String orderid, String notes, long outletid) {
    ContentValues values = new ContentValues();
    values.put(DBHelper.ORDER_ID, orderid); // inserting a string
    values.put(DBHelper.NOTES, notes); // inserting an int
    values.put(DBHelper.OUTLET_ID, outletid); // inserting an int

    long insertId = database.insert(DBHelper.TABLE_ORDER, null,
            values);
    Cursor cursor = database.query(DBHelper.TABLE_ORDER,
            allorder, DBHelper.ORDER_ID + " = " + insertId, null,
            null, null, null);

        cursor.moveToFirst();
        order neworder = cursorToorder(cursor);
        cursor.close();
        return neworder;}
 private order cursorToorder(Cursor cursor) {
    order order = new order();
    order.setorderid(cursor.getString(cursor.getColumnIndex(DBHelper.ORDER_ID)));
    order.setorderdate(cursor.getString(cursor.getColumnIndex(DBHelper.ORDER_DATE)));
    order.setnotes(cursor.getString(cursor.getColumnIndex(DBHelper.NOTES)));
    order.setoutletid(cursor.getLong(cursor.getColumnIndex(DBHelper.OUTLET_ID)));
    return order;
    }

错误参考此代码

Cursor cursor = database.query(DBHelper.TABLE_ORDER,
            allorder, DBHelper.ORDER_ID + " = " + insertId, null,
            null, null, null);

这段代码

order.setorderid(cursor.getString(cursor.getColumnIndex(DBHelper.ORDER_ID)));

orderid是字符串,我试图从yyyyMMddHHmmss获取。这是代码:

    private String orderid(){
    SimpleDateFormat dateFormat = new SimpleDateFormat(
            "yyyyMMddHHmmss", Locale.getDefault());
    Date date = new Date();
    return dateFormat.format(date);

} 我非常感谢你给予的任何帮助。谢谢你。

2 个答案:

答案 0 :(得分:1)

查询与任何行都不匹配。检查moveToFirst()的结果以查看操作是否成功,然后才访问游标数据。

示例:

order neworder = null;
if (cursor.moveToFirst()) {
    order neworder = cursorToorder(cursor);
}
cursor.close();
return neworder;

insertId获得的insert()是该行的sqlite行ID。它可能与ORDER_ID不一样。要使列成为rowid的别名,请将其声明为INTEGER PRIMARY KEY

答案 1 :(得分:1)

我在logcat中看到的错误不是关于_Player_8,而是关于未知列" KEY_Team_Name"

问题在于您的活动,即最后一行之前的行:

String EntryA =String.valueOf( db.getentry("Ravirrrr", "KEY_Team_Name"));

应该是:

String EntryA =String.valueOf( db.getentry("Ravirrrr", DatabaseHandler.KEY_Team_Name));

DatabaseHandler应该公开所有列名,因为getentry方法需要列名。

编辑:在下面的评论中添加问题的答案。 在调用db.query之后,你应该通过调用Cursor.isAfterLast()来检查你是否得到了什么。如果为true,则select返回空结果集。 在您的示例中,您将获得一个空结果集,因为代码使用" Ravi"作为团队名称,然后要求一个名为" Ravirrrr"的团队。