Android SQLite 存储大文件

所谓的大文件,就是动则 100k 以上的,比如图片,音频,视频等。说实话,SQLite 不适合存储大文件,我们一般也很少这么做

但总会有那么几次,很冲动的想把它们放到 SQLite 里,因为好管理啊

接下来我们就来讲讲如何将一张图片保存到 SQLite 里,然后再读出来

Android SQLite 存储大文件

  1. 创建 SQLite 数据库表的时候,需要创建一个 BLOB 字段,用于存储二进制数据

    这是必须的,也是唯一的选择

    db.execSQL("CREATE table img_data (_id INTEGER PRIMARY KEY AUTOINCREMENT,filename VARCHAR(255),data BLOB)")
    

    三个字段,自增 id ,图片文件名,图片数据

  2. 将图片转换为 BLOB 格式,比如 ImageView 中的图片可以用下面的方法

    // 获取数据库
    SQLiteDatabase db = mDBService.getWritableDatabase();
    
    try {
    
        ByteArrayOutputStream out = new ByteArrayOutputStream();
    
        压缩为 PNG 模式,100 表示跟原图大小一样
        ((BitmapDrawable) imageview.getDrawable()).getBitmap()
            .compress(CompressFormat.PNG,100,out);
    
        //如果是普通图片,则直接转换为 `Bitmap` 再调用即可
    
        Object[] args = new Object[]{outs.toByteArray()};
    
        db.execSQL("INSERT INTO img_data(filename,data)VALUES(?,?)","img_1.png",args);
    
        out.close();
        db.close();
    
    } catch (Exception e ){
        e.printStackTrace();
    }
    
  3. 读取 SQLite 中的图片

    // 获取数据库
    SQLiteDatabase db = mDBService.getWritableDatabase();
    
    // 一般情况情况下都是根据 id 来获取
    Cursor cursor = db.rawQuery("SELECT filename,data FROM img_data LIMIT 1",null);
    
    if ( cursor != null ) {
    
        if ( cursor.moveToFirst()) {
            // 取出图片保存到字节数组中
            byte[] img = cursor.getBlob(cursor.getColumnIndex("data"));
        }
    
        cursor.close();
    }
    
    // 将图片显示到 ImageView 上 
    if ( img != null ) {
        ByteArrayInputStream in = new ByteArrayInputStream(img);
    
        imageview.setImageDrawable(Drawable.createFromStream(in,"src"));
    }
    

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.