sqlite图片是怎么储存的呢?其实是二进制的方式存储的
blob代表使用二进制储存 (更多类型参考:数据库简介)
在创建表的地方,VALUE_PIC代表存储图片字段,blob代表这个字段是以二进制储存的。
/*创建表语句 语句对大小写不敏感 create table 表名(字段名 类型,字段名 类型,…)*/
private final String CREATE_PERSON = "create table " + TABLE_NAME_PERSON + "(" +
VALUE_ID + " integer primary key," +
VALUE_NAME + " text ," +
VALUE_ISBOY + " integer," +
VALUE_AGE + " ingeter," +
VALUE_ADDRESS + " text," +
VALUE_PIC + " blob" +
")";
那怎么存,其实存的是字节数组byte[]
/**
* 添加数据
* @param model 数据模型
* @return 返回添加数据有木有成功
*/
public PersonModel addPersonDataReturnID(PersonModel model) {
//把数据添加到ContentValues
ContentValues values = new ContentValues();
values.put(VALUE_NAME, model.getName());
values.put(VALUE_AGE, model.getAge());
values.put(VALUE_ISBOY, model.getIsBoy());
values.put(VALUE_ADDRESS, model.getAddress());
//这里存储图片,model.getPic() 是一个字节数组
values.put(VALUE_PIC, model.getPic());
//添加数据到数据库
long index = getWritableDatabase().insert(TABLE_NAME_PERSON, null, values);
//不等于-1表示添加成功(可以看insert源码)
if (index != -1) {
model.setId(index);
return model;
} else {
return null;
}
}
怎么将图片变成字节数组?
/**
* @param resourceID 图片资源id
* @return 将图片转化成byte
*/
private byte[] picTobyte(int resourceID)
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
InputStream is = context.getResources().openRawResource(resourceID);
Bitmap bitmap = BitmapFactory.decodeStream(is);
//压缩图片,100代表不压缩(0~100)
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
return baos.toByteArray();
}
那怎么取出来呢?
//查询全部数据
Cursor cursor = getWritableDatabase().query(TABLE_NAME_PERSON, null, null, null, null, null, null, null);
byte pic[] = cursor.getBlob(cursor.getColumnIndex(VALUE_PIC));
Bitmap b = BitmapFactory.decodeByteArray(pic, 0, pic.length);
holder.pic.setImageBitmap(b);
sqlite也无非就创建、增、删、改、查、更新。