Android SQLite 数据库 blob 数据类型 [英] Android SQLite database blob datatype

查看:34
本文介绍了Android SQLite 数据库 blob 数据类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将图像保存在我的数据库中,但我不确定一件事

I want to save Images in my database but I am not sure of one thing

我在扩展 SQLiteOpenHelper 的类上有这个方法

I have this method on the class that extends SQLiteOpenHelper

public boolean insertDemo(byte[] a, byte[] b, byte[] c, byte d) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put("id", 1);
        cv.put("demo1", a);
        cv.put("demo2", b);
        cv.put("demo3", c);
        cv.put("demo4", d);
        db.insert("demo_tb", null, cv);
        return true;
}

我的问题是,数据类型应该是什么?目前我有

My question is,what should the datatype be? currently I have

db.execSQL("create table demo_tb"+"(id integer primary key,demo1 text,demo2 text,demo3 text,demo4 text)");

onCreate 方法中.

推荐答案

我用的是BLOB类型,我没看好用TEXT类型来保存字节数组

I use the BLOB type, I do not see with good eyes use TEXT type to save an array of bytes

像这样:

protected static final String CREATE_TABLE_IMAGE = 
            "CREATE TABLE IMAGES"
            + "("
            + " IMAGE_ID"
            + " INTEGER PRIMARY KEY ,"
            + " IMAGE_BLOB"
            + " BLOB "
            +")";   

    public void CreateTable(String strCreate){
        SQLiteDatabase db = getWritableDatabase();
        db.execSQL(strCreate);
    }

    public boolean saveBytes(byte[] bytes, int id){

        boolean ret = false;
        SQLiteDatabase db = getWritableDatabase();
        db.beginTransaction();

        try{

        String sql   =   "INSERT INTO IMAGES " 
                + " ( IMAGE_ID" 
                + ", IMAGE_BLOB" 
                + " ) VALUES(?,?)";

        SQLiteStatement insertStmt      =   db.compileStatement(sql);
        insertStmt.clearBindings();
        insertStmt.bindLong(1, id);
        insertStmt.bindBlob(2, bytes);
        insertStmt.executeInsert();

        db.setTransactionSuccessful();
        db.endTransaction();

        ret = true;
        }catch(Exception e){
            e.printStackTrace();
            ret = false;
        }

        return ret;
    }

    public byte[] getBytes( int id) throws Exception {

        byte[] ret = null;

        try {

            String selectQuery = "SELECT  I.IMAGE_BLOB " 
                    + "         FROM IMAGES I WHERE I.IMAGE_ID = ?";

            SQLiteDatabase db = this.getReadableDatabase();
            Cursor c = db.rawQuery(selectQuery,new String[]{String.valueOf(id)});


            if (!c.isClosed() && c.moveToFirst() && c.getCount() > 0) {

                if (c.getBlob(c.getColumnIndex("IMAGE_BLOB")) != null)
                {                   
                    ret = c.getBlob(c.getColumnIndex("IMAGE_BLOB"));

                }
                c.close();
                if (db != null && db.isOpen())
                    db.close();
            }
            System.gc();
        } catch (Exception e) {
            System.gc();
            throw e;

        }
    }

这篇关于Android SQLite 数据库 blob 数据类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆