简体   繁体   中英

Retrieving image from SQLite Database (BLOB data type)

I have tried to retrieve the byte[] from my SQLite DB using the code:

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;
}

Error returned:

 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

Your query:

SELECT AVATAR_IMAGE FROM AVATAR_TABLE WHERE AVATAR_ID = 1

returns only 1 column and since the column indices in a cursor are 0 based, you should retrieve it with:

byte[] blob = cursor.getBlob(0);

Also, you should use moveToFirst() to check if the cursor returned any rows before retrieving the column's value:

byte[] blob = null;
if (cursor.moveToFirst()) blob = cursor.getBlob(0);
return blob;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM