it-swarm.com.de

wie speichert man Image als Blob in Sqlite und wie wird es abgerufen?

Ich möchte ein Bild (von URL) in einer SQLite-Datenbank speichern.

Dafür verwende ich: 

db = new DataBase(getApplicationContext());
URL url = new URL("http://sree.cc/wp-content/uploads/schogini_team.png");
URLConnection ucon = url.openConnection();
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is,128);
ByteArrayBuffer barb= new ByteArrayBuffer(128);

int current = 0;
while ((current = bis.read()) != -1) {
    barb.append((byte) current);
}

ContentValues filedata= new ContentValues();

filedata.put(DataBase.IMG_SRC,barb.toByteArray());

db.insert(DataBase.Table_Img, null, filedata);

In der Insert():

public void insert(String tableImg, Object object,
        ContentValues dataToInsert) {
    // TODO Auto-generated method stub
    String sql = "INSERT INTO "+tableImg+" ("+ID+","+IMG_SRC+") " +
            "VALUES ('"+1+"','"+dataToInsert+"')";
    db.execSQL(sql);
}

Für das Abrufen von Bildern:

Cursor cursor = db.selectDataToShow(DataBase.Table_Img, DataBase.IMG_SRC);

byte[] imageByteArray=cursor.getBlob(cursor.getColumnIndex(DataBase.IMG_SRC));      
cursor.close();

ByteArrayInputStream imageStream = new ByteArrayInputStream(imageByteArray);
Bitmap theImage = BitmapFactory.decodeStream(imageStream);

System.out.println(">>>>>>>>>>>>>>>>>>>>>> "+theImage);

Also hier habe ich null bekommen.

Und in meiner Datenbank ist der Wert des Bildes gespeichert als: Image=[[email protected]]

71
Siten

Hier der Code, den ich für meine App verwendet habe

Dieser Code nimmt ein Bild von der URL und konvertiert es in ein 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;
}

Um das Bild in db zu speichern, habe ich diesen Code verwendet.

    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();
}

Um das Bild zurückzugewinnen, ist dies der von mir verwendete Code.

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;
    }
}

Zum Schluss laden Sie dieses Bild in eine Bildansicht

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

deklarieren Sie die Tabelle in der DBAdaper-, d. h. der Data Base-Helfer-Klasse

 private static final String USERDETAILS=
    "create table userdetails(usersno integer primary key autoincrement,userid text not null ,username text not null,password text not null,photo BLOB,visibility text not null);";

füge die Werte so ein,

konvertiere zuerst die Bilder als Byte []

ByteArrayOutputStream baos = new ByteArrayOutputStream();  
Bitmap bitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.common)).getBitmap();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);   
byte[] photo = baos.toByteArray(); 
db.insertUserDetails(value1,value2, value3, photo,value2);

in der DEAdaper-Klasse

 public long insertUserDetails(String uname,String userid, String pass, byte[] photo,String visibility) 
{
    ContentValues initialValues = new ContentValues();
    initialValues.put("username", uname);
    initialValues.put("userid",userid);
    initialValues.put("password", pass);
    initialValues.put("photo",photo);
    initialValues.put("visibility",visibility);
    return db.insert("userdetails", null, initialValues);
}

rufen Sie das Bild wie folgt ab

Cursor cur=your query;
while(cur.moveToNext())
{
     byte[] photo=cur.getBlob(index of blob cloumn);
}

konvertieren Sie das Byte [] in ein Bild

ByteArrayInputStream imageStream = new ByteArrayInputStream(photo);
Bitmap theImage= BitmapFactory.decodeStream(imageStream);

Ich denke, dieser Inhalt kann Ihr Problem lösen

21
Balaji.K

Im Einsatz ()

public void insert(String tableImg, Object object,
        ContentValues dataToInsert) {

   db.insert(tablename, null, dataToInsert);
}

Ich hoffe es hilft dir.

1
Nishant Shah

für ein ionisches Projekt

 var imgURI = ""; 
 var imgBBDD = ""; // sqllite zum Speichern in 

 Funktion übernehmen Bild () {
 var options = {
 Qualität: 75, 
 destinationType: Camera.DestinationType.DATA_URL, 
 sourceType: Camera.PictureSourceType.CAMERA, 
 allowEdit: true, 
 codingType: Camera.EncodingType.JPEG, 
 targetWidth: 300, 
 targetHeight: 300, 
 popoverOptions: CameraPopoverOptions, 
 saveToPhotoAlbum: false 
 }; 

 $ cordovaCamera.getPicture (Optionen) .dann (Funktion (imageData) {
 imgURI = "data: image/jpeg; base64," + imageData; 
 imgBBDD = imageData; 
}, Funktion (err) { 
 // Es ist ein Fehler aufgetreten. Zeigt dem Benutzer eine Nachricht an 
}); 
 } 

Und jetzt haben wir imgBBDD in SqlLite eingefügt

 function saveImage = function (theId, theimage) {
 var insertQuery = "INSERT INTO-Bilder (ID, Bild) WERTE (" + theId + ", '" + theimage + "');" 
 console.log ('>>>>>>>'); 
 DDBB.SelectQuery (insertQuery) 
 .then (Funktion (Ergebnis) {
 console.log ("Image gespeichert"); 
}) 
 .catch (Funktion (err) 
 {
 deferred.resolve (err); 
 return cb (err); 
}); 
 } 

Eine Serverseite (PHP)

 $ request = file_get_contents ("php: // input"); // ruft die Rohdaten ab 
 $ dades = json_decode ($ request, true); // wahr für Rückgabe als Array 


 if ($ dades == "") {
 $ array = array (); 
 $ array ['error'] = -1; 
 $ array ['descError'] = "Fehler beim Abrufen der Datei"; 
 $ array ['logError'] = ''; 
 echo json_encode ($ array); 
 Ausfahrt;
 } 
 // Senden Sie das Bild erneut an den Client 
 header ('Content-Type: image/jpeg'); 
 echo ''; 

0
pabacu
byte[] byteArray = rs.getBytes("columnname");  

Bitmap bm = BitmapFactory.decodeByteArray(byteArray, 0 ,byteArray.length);
0
bhruguni

möglicherweise möchten Sie auch in/von base64 codieren und decodieren

    function uncompress(str:String):ByteArray {
            import mx.utils.Base64Decoder;
            var dec:Base64Decoder = new Base64Decoder();
            dec.decode(str);
            var newByteArr:ByteArray=dec.toByteArray();        
            return newByteArr;
        }


    // Compress a ByteArray into a Base64 String.
    function compress(bytes:ByteArray):String { 
        import mx.utils.Base64Decoder; //Transform String in a ByteArray.
        import mx.utils.Base64Encoder; //Transform ByteArray in a readable string.
        var enc:Base64Encoder = new Base64Encoder();    
        enc.encodeBytes(bytes);
        return enc.drain().split("\n").join("");
    }
0
johnny