android sqlite数据库

android sqlite添加图片到数据库

2017-05-26  本文已影响1006人  duoduo7628

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也无非就创建、增、删、改、查、更新。

上一篇 下一篇

猜你喜欢

热点阅读