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();
}
}
希望对你有所帮助
我不断收到 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();
}
}
希望对你有所帮助