Image in Sqlite Datenbank speichern

  • Hallo,


    ich habe mal wieder ein Problem. Ich versuche ein Bild in eine Sqlite Datenbank zu speichern. ( Typ=Blob). Ich konvertiere das Bild in ein ByteArray. Das Array wird auch gefüllt aber beim schreiben des Arrays in die DB wird scheinbar nur eine Objekt ID oder sowas änliches in die DB geschrieben. Hier mal ein Beispiel: [B@4112f8f0
    Hier noch ein bisschen Code:



    Hoffentlich kann mir jemand helfen ich suche schon seit Stunden nach einer Lösung. :(


    Gruß

  • Hi oldwarrior,


    Also das da so ein komisches Zeug drin steht liegt daran das du ein Array in einen String "konvertierst".


    Beispiel:

    Java
    int[] arr = {1,2,3,4,5,6};
    System.out.println("Array "+ arr);


    Ausgabe:

    Code
    Array [I@19821f


    Wenn es nicht wirklich wichtig ist solltest du deinen SQL-Befehl nicht als String codieren sondern die von Android vorbestimmten Methoden zur DB Manipulation nutzen.
    SQLiteDatabase -> update
    ContentValues -> put


    Mfg Titus

  • Hallo Titus,


    danke für deine Hilfe. Aber das habe ich auch schon getestet. Wenn ich im SQL String die Hochkomma weglasse erhalte ich eine SQL Exception:
    unrecognized token: "[B@41144560 WHERE aktiver_datensatz ='1';": , while compiling: UPDATE Oelspur SET unterschrift = [B@41144560 WHERE aktiver_datensatz ='1';
    Ich habe es gestern mit ContentValues versucht aber wie gesagt dann erhalte ich auch diese Exception???


    Gruß Renato

  • Hallo Titus,


    hier mal mein geänderter Code.

    Code
    byte[] photo = baos.toByteArray();
    	
    	ContentValues cv = new ContentValues();
    	cv.put("unterschrift", photo);
    	
    
    
    	String sqlStr = "UPDATE " + MAMActivity.MY_DB_OELSPUR_TABLE + " SET "
    		+ cv + "  WHERE aktiver_datensatz ='"
    		+ "1'" + ";";


    Was mache ich falsch?



    Gruß Renato

  • Hi oldwarrior.


    ähm du hast dir aber mal die Links angesehen die ich gepostet habe oder?
    Weil dein Code ist Blödsinn und kann auch nicht gehen. Sry.


    mfg Titus


    EDIT:
    P.s. Schau dir die Links an und wenn du dann nicht weiterkommst oder Fragen hast melde dich einfach wieder

  • Hallo Titus,


    du hast wohl Recht das dort irgendetwas, blödsinniges in der SQL Anweisung steht, aber ich sitze wohl schon zu lange vor dem Problem und sehe den Wald vor lauter Bäumen nicht mehr. ;( Werde erst einmal in den Garten gehen um den Kopf frei zu bekommen. Vielleicht kannst du mir ja mal ein kleines Example zukommen lassen wie ich das ByteArray da richtig hinein bekomme. Wäre echt nett. :)


    Danke,


    Gruß Renato

  • Hi oldwarrior,


    der Fehler im Code mit dem ContentValues ist der gleiche wie mit dem Array du wandelst es in einen String um.


    Vielleicht macht das hier die Sache deutlicher:

    Java
    //Das 
    String sqlStr = ""+ cv;
    //ist das gleiche wie das hier
    String sqlStr = cv.toString();


    und genauso mit dem Array:

    Java
    int[] arr = {1,2,3,4,5,6};
    //Das 
    String strArray = ""+ arr;
    //ist das gleiche wie das hier
    String strArray = arr.toString();


    so was du aber möchtest ist den Inhalt des Arrays bzw. der ContenValue in die Datenbank übertragen nicht das Objekt als String.


    In den Links kannst du sehen das die Klasse SQLiteDatabase eine Methode bereitstellt die es ermöglich den Inhalt einer Zeile zu verändern(SQL Update). Diese erhält laut Doku den Tabellenname, den geänderten Inhalt (ContentValue), wo es geändert werden soll und unter welcher Bedingung.


    Vielleicht zeigt dieses Beispiel die ganze Sache ein wenig besser:


    Beispiel stammt aus Android -Grundlagen und Programmierung von Arno Becker und Marcus Pant


    So nun das ganz mit deinem Problem:


    mfg Titus

  • Hallo Titus,


    danke, danke. Ich habe den Code so eingesetzt und es klappt, aber leider habe ich noch ein aber.
    Das Array ist definitiv gefüllt. Die Update Methode gibt mir auch einen geänderten Datensatz zurück. Danach sende ich mir die Datenbank per Mail auf meinen Rechner und schaue mir das Feld mit dem SQLManager an. Dort steht leider nur folgendes drin: �PNG
    Immerhin schon ein Anfang aber leider noch nicht vollständig?


    Danke für deine Hilfe,


    Gruß Renato

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!