Android SQLite:从表中检索行时出现 CursorIndexOutOfBoundsException?

Android SQLite: CursorIndexOutOfBoundsException when retrieving a row from a table?

我不断收到 android.database.CursorIndexOutOfBoundsException:请求索引 -1,大小为 1 尝试从 Sqlite 获取单行时出现异常 table使用 ID 值。

您认为为什么会发生这种情况?我的代码有什么问题?

public Product getProduct(DBOps dop, String productId) {

        Product p = new Product();
        String sqlQuery = "SELECT " + TableInfo.PID + " FROM "
  + TableInfo.TABLE_NAME +" WHERE pid="+"'"+productId+"'"; 
        SQLiteDatabase SQ = dop.getReadableDatabase();
        Cursor CR = SQ.rawQuery(sqlQuery, null);

        try
        {
            if(CR.getCount() > 0)
            {
                while (!CR.isAfterLast()) {
                    p.PID = CR.getString(0);
                    p.NAME = CR.getString(1);
                    p.SIZE = CR.getString(2);
                    p.COLORS = CR.getString(3);
                    p.DESC = CR.getString(4);
                    p.PRICE= CR.getString(5);
                    p.OUTLETS = CR.getString(6);
                    p.FABRIC = CR.getString(7);
                    p.QUANTITY = CR.getString(8);
                    p.CATEGORY = CR.getString(9);
                    p.RATING = CR.getString(10);

                    CR.moveToNext();
                }
            }
            else
            {
                CR.close();
            }
        }
        catch(Exception ex)
        {
            Log.e("DBOps Error", "Look at DBOps Class's getProduct Method");
            Log.e("DBOps Error", ex.toString());
        }
        return p;
    }

您需要先调用 cursor.moveToFirst() 才能使用光标。这会将它移动到第 0 行。确保检查 return 值 - 如果它 return 为假,则由于某种原因它无法移动到第 0 行(通常它意味着 0 行 return编辑).

android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1

因为您目前 select 只从 table 中获取一列,即 TableInfo.PID 但试图从游标中检索多于一列。

因此,通过指定 select 查询中的所有列或使用 * FROM 获取所有列来更改 select 查询:

String sqlQuery = "SELECT * FROM "
  + TableInfo.TABLE_NAME +" WHERE pid="+"'"+productId+"'"; 

像这样使用

  if(cursor.getCount()>0)
        {
        if(cursor.moveToFirst())

        { do

        {
         //your code 
        }
while(cursor.moveToNext());
        cursor.close();
        }
        }

希望对你有所帮助