我有一个应用程序,它可以从手机图库中获取图像,但是如何将其存储到SQLite数据库中以及如何从SQLite数据库中获取该图像作为用户配置文件。
答案 0 :(得分:0)
要在SQLite数据库中存储图像,您必须使用“ blob”。
示例:
存储图像
public void insertImg(int id , Bitmap img ) {
byte[] data = getBitmapAsByteArray(img); // this is a function
insertStatement_logo.bindLong(1, id);
insertStatement_logo.bindBlob(2, data);
insertStatement_logo.executeInsert();
insertStatement_logo.clearBindings() ;
}
public static byte[] getBitmapAsByteArray(Bitmap bitmap) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 0, outputStream);
return outputStream.toByteArray();
}
检索图像
public Bitmap getImage(int i){
String qu = "select img from table where feedid=" + i ;
Cursor cur = db.rawQuery(qu, null);
if (cur.moveToFirst()){
byte[] imgByte = cur.getBlob(0);
cur.close();
return BitmapFactory.decodeByteArray(imgByte, 0, imgByte.length);
}
if (cur != null && !cur.isClosed()) {
cur.close();
}
return null;
}
我建议您遵循tutorial
答案 1 :(得分:0)
您可以将图像存储为斑点
以这种方式创建表格
"CREATE TABLE TABLE_NAME_HERE (lastname TEXT, gender TEXT, signature BLOB)"
将您的人员类别声明为
public String Lastname;
public String Gender;
public byte[] Signature;
将图像另存为并转换为字节数组
byte[] signatureByte = //get the image byte array here
添加为db
SQLiteDatabase db = OpenDb();
ContentValues values = new ContentValues();
values.put(KEY_LAST_NAME, person.Lastname);
values.put(KEY_GENDER, person.Gender);
values.put(KEY_SIGNATURE, person.Signature);
db.insert(TABLE_NAME_HERE, null, values);
检索为
SQLiteDatabase db = OpenDb();
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME_HERE, null);
if (cursor.moveToFirst()) {
Person person = new Person();
person.Lastname = cursor.getString(cursor.getColumnIndex(KEY_LAST_NAME));
person.Gender = cursor.getString(cursor.getColumnIndex(KEY_GENDER));
person.Signature = cursor.getBlob(cursor.getColumnIndex(KEY_SIGNATURE));
return person;
}
显示为
signature.setImageBitmap(BitmapFactory.decodeByteArray(person.Signature, 0, person.Signature.length))
或者,您可以将映像存储在应用程序文件夹中,并在数据库中存储对此映像的引用。这样您就可以检索它。
答案 2 :(得分:0)
您应该考虑的第一个问题是是否应将图像保存在数据库中。
通常存储图像不是一个好主意。
对于Android来说,存储和检索大图像的大小可能超过100KB。在这样的大小(可能更大)下,SQLite实际上可以非常有效35% Faster Than The Filesystem(请注意,该文档相对较旧)。
除非您设计了标准Android SDK的替代方案,否则可以检索的图像的绝对最大大小在2MB以下。这是因为CursorWindow(用于返回的行的缓冲区)只有2MB。
简而言之,如果要存储的任何图像接近2MB或2MB或更大,那么您将无法在不使事情复杂化的情况下对其进行检索。 How to use images in Android SQLite that are larger than the limitations of a CursorWindow? 请注意,不建议使用此方法。
建议将图像保存到磁盘,并存储路径(或足以唯一标识图像完整路径的路径)。因此,您可以从数据库中检索该路径,然后从提取的路径中检索图像。
How can I insert image in a sqlite database处的答案。演示这种方法以及在数据库中保存较小的图像(100k或更少)(利用35% Faster Than The Filesystem的优势)。