PDA

View Full Version : Java Sql mit Hex Werten



max40
16-03-09, 16:01
Hallo,




ich habe für das letzte Feld den Wert nur als Hex zur Verfügung, den ich auch nicht umwandeln möchte! Meine frage wäre jetzt, wie sieht der richtige SQL-Befehl dafür aus, bzw. was muss ich an anderer Stelle anders machen?




final Connection connect = manager.getJDBCConnection("Test");

final String sql = "INSERT INTO Tabelle (Feld1, Feld2, Feld3) VALUES ( ?, ?, ?)";

final PreparedStatement s = connect.prepareStatement(sql);

s.setString(1, "XXX");

s.setString(2, "XXX");

final String hex = „Mein HEX“;

s.setString(3, hex);









Gruß

Fuerchau
16-03-09, 19:11
Das Zielfeld muss als BINARY definiert sein.
Handelt es sich um die DB2/400 dann als CHAR(nn) CCSID 65535 definieren.
Der Inhalt wird dann nicht codegewandelt.

max40
17-03-09, 10:03
Moin,
ich gehe davon aus das Sie meinen das ich das Feld in der Datenbank als BINARY definieren soll!
Besteht nicht evtl. die Möglichkeit das ich den SQL Befehl anpasse, so das er diesen ohne ihn nochmals zu kodieren als String ablegt? z.B. in Grün würde ich es so machen:
INSERT INTO TABELLE (Feld1, Feld2, Feld3) VALUES ( 'XXX', 'XXX', x'e9c5c9c3c8d5e4d5c7' )


für mein x'e9c5c9c3c8d5e4d5c7' steht dann in der DB „ZEICHNUNG“! Wenn möglich, wie müsste ich dies in Java gestalten?

Fuerchau
17-03-09, 12:37
Das nützt dir insofern nichts, als dass die x-Konstante in CHAR umgewandelt wird und somit in die Ziel-CCSID der PF übersetzt wird.

Du kannst ggf. den Inhalt noch casten:

cast('ZEICHEN' as char(nn) ccsid 65535)

Dies könnte ggf. beim Schreiben hilfreich sein.
Allerdings musst du genauso dann beim Lesen gezielt zurückcasten, sonst gibts Schrott.

Und weiß das derjenige, der die Daten anschließend weiterverarbeiten will ?