从 SQLite 数据库中检索图像(BLOB 数据类型)

Posted

技术标签:

【中文标题】从 SQLite 数据库中检索图像(BLOB 数据类型)【英文标题】:Retrieving image from SQLite Database (BLOB data type) 【发布时间】:2021-05-10 16:43:18 【问题描述】:

我尝试使用以下代码从我的 SQLite DB 中检索 byte[]:

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 ResultInfowho=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

【问题讨论】:

【参考方案1】:

您的查询:

SELECT AVATAR_IMAGE FROM AVATAR_TABLE WHERE AVATAR_ID = 1

仅返回 1 列,并且由于游标中的列索引基于 0,您应该使用以下命令检索它:

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

此外,您应该在检索列的值之前使用moveToFirst() 检查游标是否返回了任何行:

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

【讨论】:

以上是关于从 SQLite 数据库中检索图像(BLOB 数据类型)的主要内容,如果未能解决你的问题,请参考以下文章

android 从 MySql 数据库中检索 blob 图像

如何将图像存储为 Sqlite 中的 blob 以及如何检索它?

c# sqlite - 从数据库中检索 BLOB 文本

从 Android sqlite 数据库中检索大 blob

为啥 getBlob() 从我的数据库中的 Blob 列中检索整数数据?

Android:从数据库中检索位图的问题