how to store Image as blob in Sqlite & how to retrieve it?

后端 未结 6 955
野的像风
野的像风 2020-11-22 04:31

I want to store an image(from url) into a sqlite database.

For that I use:

db = new DataBase(getApplicationContext());
URL url = new URL(\"http://sr         


        
6条回答
  •  悲&欢浪女
    2020-11-22 05:07

    Here the code i used for my app

    This code will take a image from url and convert is to a byte array

    byte[] logoImage = getLogoImage(IMAGEURL);
    
    private byte[] getLogoImage(String url){
         try {
                 URL imageUrl = new URL(url);
                 URLConnection ucon = imageUrl.openConnection();
    
                 InputStream is = ucon.getInputStream();
                 BufferedInputStream bis = new BufferedInputStream(is);
    
                 ByteArrayBuffer baf = new ByteArrayBuffer(500);
                 int current = 0;
                 while ((current = bis.read()) != -1) {
                      baf.append((byte) current);
                 }
    
                 return baf.toByteArray();
         } catch (Exception e) {
              Log.d("ImageManager", "Error: " + e.toString());
         }
         return null;
    }
    

    To save the image to db i used this code.

     public void insertUser(){
            SQLiteDatabase db = dbHelper.getWritableDatabase();
            String delSql = "DELETE FROM ACCOUNTS";
            SQLiteStatement delStmt = db.compileStatement(delSql);
            delStmt.execute();
    
            String sql = "INSERT INTO ACCOUNTS (account_id,account_name,account_image) VALUES(?,?,?)";
            SQLiteStatement insertStmt = db.compileStatement(sql);
            insertStmt.clearBindings();
            insertStmt.bindString(1, Integer.toString(this.accId));
            insertStmt.bindString(2,this.accName);
            insertStmt.bindBlob(3, this.accImage);
            insertStmt.executeInsert();
            db.close();
    }
    

    To retrieve the image back this is code i used.

    public Account getCurrentAccount() {
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        String sql = "SELECT * FROM ACCOUNTS";
        Cursor cursor = db.rawQuery(sql, new String[] {});
    
        if(cursor.moveToFirst()){
            this.accId  = cursor.getInt(0);
            this.accName = cursor.getString(1);
            this.accImage = cursor.getBlob(2);
        }
        if (cursor != null && !cursor.isClosed()) {
            cursor.close();
        }
        db.close();
        if(cursor.getCount() == 0){
            return null;
        } else {
            return this;
        }
    }
    

    Finally to load this image to a imageview

    logoImage.setImageBitmap(BitmapFactory.decodeByteArray( currentAccount.accImage, 
            0,currentAccount.accImage.length));
    

提交回复
热议问题