Java Android-SQLiteOpenHelper-如何将图像直接存储到数据库

Java Android-SQLiteOpenHelper-如何将图像直接存储到数据库,java,android,sqlite,bitmap,Java,Android,Sqlite,Bitmap,我有一个SQLite数据库,在那里我直接插入数据,这些数据应该显示为我的应用程序用户的预存储数据。我的代码对一个图像工作正常。但不知道如何转换和检索图像数组 我尝试了位图Bitmap=BitmapFactory.decodeResourcegetResources.pmge;。但我解码资源synatx时出错了 代码 您必须使用BLOB格式在表中存储图像。您应该将图像转换为流,然后将其存储。我希望这一格式可以帮助您:您可以使用。SQL BLOB类型将大量二进制数据字节存储为数据库列中的值 或 您可

我有一个SQLite数据库,在那里我直接插入数据,这些数据应该显示为我的应用程序用户的预存储数据。我的代码对一个图像工作正常。但不知道如何转换和检索图像数组

我尝试了位图Bitmap=BitmapFactory.decodeResourcegetResources.pmge;。但我解码资源synatx时出错了

代码


您必须使用BLOB格式在表中存储图像。您应该将图像转换为流,然后将其存储。我希望这一格式可以帮助您:

您可以使用。SQL BLOB类型将大量二进制数据字节存储为数据库列中的值


您可以存储到数据库中以获取文件所在位置的引用。

将图像转换为位图,然后将位图转换为字节[],然后将其作为Blob存储到数据库中

要将位图转换为字节[],可以使用以下方法:

Bitmap yourBitmap;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
yourBitmap.compress(Bitmap.CompressFormat.PNG, 100, bos);
byte[] bArray = bos.toByteArray();
而不是用于检索/获取图像使用

byte[] byteArray = DBcursor.getBlob(columnIndex);  
Bitmap bm = BitmapFactory.decodeByteArray(byteArray, 0 ,byteArray.length);

不,您不能将图像直接存储到数据库中,有多种方法可以实现这一点。e、 g

首先,需要在表中创建BLOB类型的字段

第二步,将图像转换为字节数组


最后,将该字节数组存储/推送到数据库表中数据类型为BLOB的特定列中

我建议不要直接在数据库中存储图像。只需将图像存储在特定路径上,并将该图像的路径存储在数据库中

检查以下答案:

不推荐在数据库中存储文件的原因:

您将需要额外的代码来从数据库中提取和流式传输图像 您的数据库服务器将变得沉重,数据库也将变得沉重。
您不应该以错误的方式存储数据库,应该在数据库中存储该映像的路径。映像的路径从何处开始?要存储的映像必须在设备上可用,对吗?如果是这种情况,您可以使用文件类API获取该图像的路径,并只存储该路径。易于理解的我想这就是你要找的okayz。如果我有多个图像呢。请查看我更新的代码。我可以这样做吗。制作一个int数组整数[]mThumbIds={R.drawable.ic_launcher,R.drawable.ic_launcher};创建一个如下表Create_EMPLOYEES_table=Create table+EMPLOYEES_table++EMP_ID+integer主键自动递增,+EMP_PHOTO+blob not null,+EMP_NAME+text not null unique,+EMP_AGE+integer;;制作一个只有两列的新表,一列用于ID,一列用于存储图像,存储尽可能多的图像,但所有图像的ID都应相同,这意味着您必须同时存储ID和图像;为此考虑一个外键。因此,当您查询时,它就像选择ID==一个特定ID的所有图像,这样您就可以为一个条目存储多个图像。我不明白您的意思,您能解释一下您的意思或您想要实现什么吗?我完美地从sqlite数据库存储和检索了一个图像。我已经更新了它的代码。但无法转换一个图像数组。我明白了。一个图像完成了。但是多个图像呢。
byte[] byteArray = DBcursor.getBlob(columnIndex);  
Bitmap bm = BitmapFactory.decodeByteArray(byteArray, 0 ,byteArray.length);