通过 android 应用程序将 png 图像保存在数据库中

Saving png image in database through android app

我想使用我开发的应用程序将图像保存到移动设备中,最好的方法是什么。

我试图通过 sqlite 保存,但还有其他选择吗?

推荐的方式是将图片存储为文件而不是数据库中,然后存储路径或足够的路径以在数据库中唯一标识图像。

要存储图像,您必须将其存储为基于字节 [](字节数组)的 BLOB; 但是,使用Android SDK,有一个限制,即使可以保存,也只能检索小于2MB的图像。

  • 从技术上讲,您可以将图像存储为十六进制、二进制、八进制字符串,但那样会更复杂、效率更低甚至限制更多。。所以真的 你必须将它存储为 BLOB 并不完全符合事实。

用 SQLite 或大多数结构化数据库存储图像(或任何大文件)实际上也毫无用处,因为您几乎无法明智地处理数据查询。

你实际上通过 SQL 使用类似 :-

的方式保存了一个 BLOB
INSERT INTO your_table VALUES(x'00FF01EF');
  • 即00(0)是第一个字节,FF(255)是第二个,01(01)是第三个…………
  • 请注意,以上仅适用于具有单列的 table

但是,SQLiteDatabase insert 便捷方法会代表您将 byte[] 转换为正确的 SQL(十六进制字符串) .

所以你通常会使用 :-

ContentValues cv = new ContentValues();
cv.put("your_column",your_image_as_a_byte_array);
your_sqlitedatabase_object.insert("your_table",null,cv);

您使用类似于

的方式从游标(查询结果)检索字节数组
your_retrieved_image_byte_array = your_cursor.getBlob(your_column_offset_as_an_int); //<<<<<<<<< CursorWindow full error if the row cannot fit into the CursorWindow which has 2MB limit

你不妨看看How can I insert image in a sqlite database, as this goes into more detail and has code that stores both images and paths (either one is stored based upon the image size, less then 100k, then the image is stored, else the path is stored) and additionally retrieves the images into a ListView. Additionally, although not recommended this is a way of getting around the 2Mb limit