从 SQLite 数据库中检索图像(BLOB 数据类型)
Retrieving image from SQLite Database (BLOB data type)
我尝试使用以下代码从我的 SQLite 数据库中检索字节[]:
public byte[] getImageData() throws SQLException{
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT AVATAR_IMAGE FROM AVATAR_TABLE WHERE AVATAR_ID = 1", null);
cursor.moveToFirst();
byte[] blob = cursor.getBlob(1);
return blob;
}
返回错误:
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.android.providers.media.documents/document/image:241292 flg=0x1 }} to activity {com.example.physicalactivity/com.example.physicalactivity.ProfileActivity}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
您的查询:
SELECT AVATAR_IMAGE FROM AVATAR_TABLE WHERE AVATAR_ID = 1
returns 只有 1 列并且由于游标中的列索引是基于 0
的,因此您应该使用以下方法检索它:
byte[] blob = cursor.getBlob(0);
此外,您应该使用 moveToFirst()
在检索列的值之前检查游标是否返回任何行:
byte[] blob = null;
if (cursor.moveToFirst()) blob = cursor.getBlob(0);
return blob;
我尝试使用以下代码从我的 SQLite 数据库中检索字节[]:
public byte[] getImageData() throws SQLException{
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT AVATAR_IMAGE FROM AVATAR_TABLE WHERE AVATAR_ID = 1", null);
cursor.moveToFirst();
byte[] blob = cursor.getBlob(1);
return blob;
}
返回错误:
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.android.providers.media.documents/document/image:241292 flg=0x1 }} to activity {com.example.physicalactivity/com.example.physicalactivity.ProfileActivity}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
您的查询:
SELECT AVATAR_IMAGE FROM AVATAR_TABLE WHERE AVATAR_ID = 1
returns 只有 1 列并且由于游标中的列索引是基于 0
的,因此您应该使用以下方法检索它:
byte[] blob = cursor.getBlob(0);
此外,您应该使用 moveToFirst()
在检索列的值之前检查游标是否返回任何行:
byte[] blob = null;
if (cursor.moveToFirst()) blob = cursor.getBlob(0);
return blob;