ich habe ein problem mit dem Speichern eines bytearrays in ein bytea feld.
wenn ich in java diesen array in das feld speichere, und ihn danach wieder heraushole ist es ein anderer als ich gespeichert habe(sogar die länge ist verändert).
ich verzweifle langsam daran, ich probiere schon seit 2 tagen das problem zu lösen aber ich komm einfach nicht weiter.
ich hoffe ja das das ein bekanntes problem ist und es da ne ganz einfache lösung gibt, ich bin für jeden vorschlag dankbar, denn ich hbe nichtmal ne idee woran das denn genau liegen könnte.
Wir haben leider auch keine Idee, um dir helfen zu können. Ich persönlich kann zwar kein Java, aber auch jeder Java-Kundige hier um Forum wird dir nicht weiterhelfen können.
Warum nicht?
Woher sollen wir einschätzen können, was du falsch machst, wenn du mit keiner Fehlermeldung, keinem Beispieldatensatz und keinem Beispielcode herausrückst?
so ich lasse mir da quasi einen schlüssel generieren und in der Db in ein bytea feld speichern.
dann lass ich mir den key wieder aus der db in bytearray objekt auslesen und vergleiche den gespeicherte mit dem ausgelesen bytearray und in der konsole kommt so etwas raus:
Key in DB: -5+73+73+59+76±27+67+118+
Key aus DB: 91+66+64+49+57+56+57+102+56+52+
mein problem ist jetzt, es ist nicht dasselbe bytearray
ich hoffe ich konnte das problem jetzt ein bisschen verständlicher machen, und vllt könnt ihr mit bei der lösung helfen.
aus diesem bytearray will ich nämlich einen key erzeugen, mit dem ich einen mit diesem key verschlüsselten string entschlüsseln kann.
Entspricht der Key Deiner Wunschvorstellung, dass er so in der Datenbank steht oder hast Du diesen Wert z. B. per Command Line direkt aus der Datenbank gelesen?
Und wenn garnichts funktioniert sollte man doch mal die Doku lesen. Die gibt es hier. In Kapitel “7. Storing Binary Data” gibt es ein ausführliches Beispiel. Allerdings muss Du es für Deine Zwecke anpassen.
Ich habe es erst gerade gesehen:
Wenn Du dich beim SQL-Befehl “INSERT INTO” an die Syntax-Regeln gehalten hättest, würde auch Dein Java-Code funktionieren.
Und wenn Du den Zahlencode
in einen String umwandelst, wirst Du auch wissen, was Du wirklich gespeichert hast. Tiefgehende Java-Kenntnisse vorausgesetzt.
Wenn du die Werte direkt in den Query einfügst, musst du deine Werte quoten, um sie als Text bereitzustellen. Siehe mein vorheriges Posting.
Wen du die Werte mittels Prepared Statements abschickst, werden sie 1:1 übernommen, weil nichts mehr geparst wird. Ausserdem sparst du dir böse Anfängerfehler wie SQL Injections.
So schwierig kann das doch nicht sein. Selbst hier in diesem Forum gibt es einen Beitrag zu deinen Problem: Startup für PostgreSQL + JDBC + Eclipse und am Ende des Beitrages gibt es auch einen Link auf die genannte Doku.
Prima. Eigentlich hatte ich erwartet, dass Du den Java-Code analysiert, damit Du deine Fehler erkennst. Mit den heutigen Entwicklungs-Werkzeugen kann man durch den Code steppen und man kann sich auch den Inhalt von Variable anzeigen lassen.
und definiert, dass man jeden Wert einzeln angeben muß und nicht eine Referenz auf “byte rawKey”. Und genau die hast Du in der Datenbank gespeichert. Das hättest Du auch feststellen können, indem Du den gelesenden Zahlen-Code in ein String umgewandeltst. Zudem hast Du mit PgAdmin ein Werkzeug mit dem Du dir jederzeit den Inhalt einer Tabelle anzuschauen kannst. Das ist auch recht einfach: Mit der Maus den Tabellennamen wählen ==> rechte Maustaste ==> Tabelle anzeigen. Was das Quoten von byta-Werten betrifft, gibt ein Kapitel über Arrays in der PostgreSQL Doku. Das solltest Du auch unbedingt lesen.
Daher ist es wichtig, die Doku zu lesen und bei auftretenen Problemen immer wieder nachzulesen.
Du hast es richtig erkannt. Und wenn man seine Fehler selbst findet, hat das auch den größten Lern-Effekt.
Nachdem Dein Java-Script in der neuen Fassung auch richtig funktioniert, solltest Du den Code hier veröffentlichen (einschließlich des Erzeugen der Tabelle in der Datenbank). Damit hilft Du in Zukunft anderen, die das gleiche Problem haben und entlastest uns.