Sqlite - 请求索引 0,大小为 0
Sqlite - getting Index 0 requested, with a size of 0
我正在尝试从我的数据库中获取一个联系人,但我不断收到索引 0 请求,大小为 0 错误。
这是我的代码:
// Getting single contact
Contact getContact(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, new String[]
{ COLUMN_ID, COLUMN_FULLNAME, COLUMN_PHONE, COLUMN_EMAIL, COLUMN_ADDRESS, COLUMN_SITE, COLUMN_BIRTHDAY },
COLUMN_ID + "=?",
new String[] { String.valueOf(id) }, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
Contact contact = new Contact(
Integer.parseInt(cursor.getString(0)),
cursor.getString(1),
cursor.getString(2),
cursor.getString(3),
cursor.getString(4),
cursor.getString(5),
cursor.getString(6));
db.close();
cursor.close();
return contact;
}
这是我遇到的错误:
android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
请帮助我了解该怎么做...
您的查询没有匹配到任何数据。
检查 moveTo...()
的结果以了解游标是否指向有效行:如果移动不成功,方法调用 returns false。要使查询匹配数据和 return 行,请检查您的查询选择条件。
此外,SQLiteDatabase
查询方法从不 return null
用于 Cursor
,因此 != null
检查是多余的。
编辑:试试这个方法,它应该有效。
Contact getContact(int id) {
Contact contact = null;
String query = "SELECT * FROM " + TABLE_NAME + " WHERE " + COLUMN_ID + " = " + id;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(query, null);
if(cursor.moveToFirst()) {
cursor.moveToFirst();
contact = new Contact(
Integer.parseInt(cursor.getString(0)),
cursor.getString(1),
cursor.getString(2),
cursor.getString(3),
cursor.getString(4),
cursor.getString(5),
cursor.getString(6));
}
cursor.close();
return contact;
}
也许改变:
if (cursor != null)
cursor.moveToFirst();
与:
if(cursor.moveToFirst())
至于这个Android Reference on Cursor,moveToFirst() returns false if the cursor is emtpy.
可能是你的table是空的。
尝试将条件更改为
if (cursor.moveToFirst())
{
Contact contact = new Contact(
Integer.parseInt(cursor.getString(0)),
cursor.getString(1),
cursor.getString(2),
cursor.getString(3),
cursor.getString(4),
cursor.getString(5),
cursor.getString(6));
}
我正在尝试从我的数据库中获取一个联系人,但我不断收到索引 0 请求,大小为 0 错误。
这是我的代码:
// Getting single contact
Contact getContact(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, new String[]
{ COLUMN_ID, COLUMN_FULLNAME, COLUMN_PHONE, COLUMN_EMAIL, COLUMN_ADDRESS, COLUMN_SITE, COLUMN_BIRTHDAY },
COLUMN_ID + "=?",
new String[] { String.valueOf(id) }, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
Contact contact = new Contact(
Integer.parseInt(cursor.getString(0)),
cursor.getString(1),
cursor.getString(2),
cursor.getString(3),
cursor.getString(4),
cursor.getString(5),
cursor.getString(6));
db.close();
cursor.close();
return contact;
}
这是我遇到的错误:
android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
请帮助我了解该怎么做...
您的查询没有匹配到任何数据。
检查 moveTo...()
的结果以了解游标是否指向有效行:如果移动不成功,方法调用 returns false。要使查询匹配数据和 return 行,请检查您的查询选择条件。
此外,SQLiteDatabase
查询方法从不 return null
用于 Cursor
,因此 != null
检查是多余的。
编辑:试试这个方法,它应该有效。
Contact getContact(int id) {
Contact contact = null;
String query = "SELECT * FROM " + TABLE_NAME + " WHERE " + COLUMN_ID + " = " + id;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(query, null);
if(cursor.moveToFirst()) {
cursor.moveToFirst();
contact = new Contact(
Integer.parseInt(cursor.getString(0)),
cursor.getString(1),
cursor.getString(2),
cursor.getString(3),
cursor.getString(4),
cursor.getString(5),
cursor.getString(6));
}
cursor.close();
return contact;
}
也许改变:
if (cursor != null)
cursor.moveToFirst();
与:
if(cursor.moveToFirst())
至于这个Android Reference on Cursor,moveToFirst() returns false if the cursor is emtpy.
可能是你的table是空的。
尝试将条件更改为
if (cursor.moveToFirst())
{
Contact contact = new Contact(
Integer.parseInt(cursor.getString(0)),
cursor.getString(1),
cursor.getString(2),
cursor.getString(3),
cursor.getString(4),
cursor.getString(5),
cursor.getString(6));
}