H2 byte[] in BINARY einfügen

Helgon

Bekanntes Mitglied
Hey,

meine Idee war ein Bild zu nem byte array zu machen und dieses dann in der DB zu speichern, nur weis ich leider nicht genau wie ich das angehen soll, hab leider nicht zu viel dazu im Internet gefunden (vllt auch nach was falschem gesucht)

mein bisheriger Ansatz ist:

Java:
private void getImageByteArray(BufferedImage image)
	{
		try {
			
			ByteArrayOutputStream os = new ByteArrayOutputStream();
			ImageIO.write(image, "jpeg", os);
			
			byte[] imageData = os.toByteArray();
			
			guiElements.put("bytes", imageData);
					
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

und eingefügt werden soll es dann so:

Das Feld Cover, also dort wo der byte array eingefügt werden soll ist vom typ BINARY(1000) (hab das so aus der H2 dokumentantion übernommen, ist das überhaupt richtig?)

Java:
public void addObject()
	{
		try {
			stmt.executeUpdate(
					"INSERT INTO DB_OBJECTS " +
					"( ISBN_10, ISBN_13, TITEL, VERLAG, PREIS, SPRACHE, FORMAT, SEITEN, GENRE, AMAZON, BEMERKUNGEN, ZUSATZ_INFOS, COVER, VERFUGBAR) " +
					"VALUES(" +
					"'"+((JTextField)guiElements.get("isbn_10")).getText()+"', " +
					/* gekürzt */
					"'"+guiElements.get("bytes")+"', " +
					"'TRUE'" +
					")");
		} catch (SQLException e) {
			e.printStackTrace();
		}

Error bekomm ich folgenden:

Java:
org.h2.jdbc.JdbcSQLException: Hexadezimal Zahl mit einer ungeraden Anzahl Zeichen: "[B@553b7453"
Hexadecimal string with odd number of characters: "[B@553b7453"; SQL statement:
INSERT INTO DB_OBJECTS ( ISBN_10, ISBN_13, TITEL, VERLAG, PREIS, SPRACHE, FORMAT, SEITEN, GENRE, AMAZON, BEMERKUNGEN, ZUSATZ_INFOS, COVER, VERFUGBAR) VALUES('3836216825', '978-3836216821', 'Der SAP-Grundkurs für Einsteiger und Anwender (SAP PRESS)', 'SAP PRESS', '29,90 €', 'Deutsch', 'Broschiert', '398 Seiten', '', 'http://www.amazon.de/Der-SAP-Grundkurs-Einsteiger-Anwender-PRESS/dp/3836216825', '', '', '[B@553b7453', 'TRUE') -- ('3836216825', '978-3836216821', STRINGDECODE('Der SAP-Grundkurs f\u00fcr Einsteiger und Anwender (SAP PRESS)'), 'SAP PRESS', STRINGDECODE('29,90 \u20ac'), 'Deutsch', 'Broschiert', '398 Seiten', '', 'http://www.amazon.de/Der-SAP-Grundkurs-Einsteiger-Anwender-PRESS/dp/3836216825', '', '', '[B@553b7453', 'TRUE') [90003-169]

Ich frag mich jetzt, ob:

  1. Ist der Datentyp für einen byte[] überhaupt richtig? - BINARY(1000)
  2. Wird das Bild überhaupt richtig in ein byte array umgewandelt? Bin mir da auch nicht ganz sicher - könnt ihr vllt mal kurz über die Methode schauen
  3. Wird ein byte array auch "ganz normal" im insert into befehl verwendet oder muss mann da mit irgend ner stream methode arbeiten? (hatte da irgendwas im internet zu gesehen, aber ka wie ich das zu ordnen soll) - wie ihr seht steht im Error beim BINARY feld als eintrag ja '[B@553b7453'

Schonmal Danke im Voraus, Grüße!
 
S

SlaterB

Gast
wenn du schon normales SQL wagst, wieso muss das dann in Java zusammengebaut sein, wieso eine komplizierte Tabelle gleich noch mit zig anderen Feldern,
verleitet nicht die Logik, erstmal ganz simpel ohne Java mit einem guten DB-Zugriffs-Tool (ok, bei H2 vielleicht weniger möglich) ein einfaches fertiges SQL (ohne Variablen!) zu testen,
was immer du dir vorstellst?

INSERT INTO dummy values('10011010101');
oder ähnlich, wahrscheinlich hast du keine Vorstellung,
aber dann bleibe doch dabei und stelle dir im Kopf und hier im Forum die klare Frage,
'was ist statt INSERT INTO dummy values('10011010101'); zu schreiben?'

das wäre jedenfalls aufgeräumter/ souveräner

-----

tatsächlich kann ich persönlich gar nicht sagen, ob man in reinem SQL Binärdaten angeben kann,
doch wiederum in Java PreparedStatement bietet aber die Möglichkeit, einen Parameter als setBinaryStream() zu übergeben


Blob ist auch ein Stichwort, da sind nun sicher paar neue Fachbegriffe für Suchen zusammen,
siehe auch
Data Types
BLOB Type

Like BINARY, but intended for very large values such as files or images. Unlike when using BINARY, large objects are not kept fully in-memory. Use PreparedStatement.setBinaryStream to store values. See also CLOB and Advanced / Large Objects.

Mapped to java.sql.Blob (java.io.InputStream is also supported).
 

Helgon

Bekanntes Mitglied
Hi, auf jeden Fall schonmal danke für deine Antwort

was meinst du mit "wenn ich mich an normales sql wage"?

Also meine konkrete Frage ist, wie ich ein Bild im Endeffekt in einer RDB speichere und ob das geht / wo vllt sogar mein Fehler ist - ansich bin ich der meinung es müsste gehen :p

Die Idee war das Bild eben zu nem byte array zu machen und dann in einem Binary oder eben Blob Feld abzulegen
Blob soll ja für Binärdaten von bis zu 2gb sein, deswegen dacht ich, dass BINARY eher passt, außerdem ist es auch "mapped to byte[]" laut der h2 doc

Data Types

Grüße
 
S

SlaterB

Gast
> was meinst du mit "wenn ich mich an normales sql wage"?

ein Menge an Bits und Bytes, ein Bild in Java, schreibt man ja auch nicht mal eben auf die Konsole/ in einen String,
genauso ist SQL Klartext,

Text, Zahlen, ein Datum als Text, alles kann man damit angeben, aber wie Binärdaten? 1001010, Hex-Werte 0xAF, Base64-Encoding,
byte-Zahlen 45, -123, 5, 79 usw., es gibt viele Möglichkeiten, einfach so drauf los bietet sich schon nichtmal bei einem Datum an,
das muss man erst nachschlagen, Beispiele suchen

'[B@553b7453' ist übrigens das toString() eines Arrays, die Zahlen der Hashcode des Objektes

mein Vorschlag ist wie gesagt PreparedStatement mit setBlob(), setBinaryStream(),
das wird dir nichts sagen, sonst wüsstest du es schon genau, kann man aber alles suchen, gibt genug Beispiele
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M byte-Array in Datenbank speichern Datenbankprogrammierung 2
C MySQL Fragen zu BLOB zu byte[], Date zu java.util.Date uvm. Datenbankprogrammierung 6
T Derby/JavaDB byte[] in Datenbank speichern [JPA] Datenbankprogrammierung 10
thE_29 Byte auslesen mit MS SQL Server Datenbankprogrammierung 4
Kirby.exe Auto Increment und nachträgliches einfügen Datenbankprogrammierung 5
N SQL-Statement Java Variable in SQL DB einfügen Datenbankprogrammierung 1
C String in Datenbank einfügen Datenbankprogrammierung 11
V Datenbankwerte in Array einfügen Datenbankprogrammierung 1
F MySQL Einfügen von Datensätzen über Java Datenbankprogrammierung 8
P JSP - Daten aus 2 Tabellen in eine neue Tabelle einfügen Datenbankprogrammierung 1
P Daten in eine mySQL Datenbank einfügen Datenbankprogrammierung 4
X MySQL Json String in MySQL einfügen. Datenbankprogrammierung 20
O JDBC Daten in zwei Tabellen mit zwei foreach-Schleifen einfügen (insert into) Datenbankprogrammierung 1
L H2 100000 Entries in Datenbank einfügen Datenbankprogrammierung 10
E Wie kann man BLOB-Spalten in DB2 einfügen? Datenbankprogrammierung 9
P Java Timestamp in Datenbank einfügen Datenbankprogrammierung 5
S MySQL Einfügen in Tabelle nur von Programm zulassen Datenbankprogrammierung 7
M MySQL User Eingaben in die DB einfügen Datenbankprogrammierung 7
H Oracle In Datenbank Einfügen Datenbankprogrammierung 20
L Hibernat will Daten nicht einfügen??? Datenbankprogrammierung 2
F [SQLite] Mehrere Datensätze einfügen Datenbankprogrammierung 12
J In viele verschiedene Datenbanken einfügen Datenbankprogrammierung 3
L CLOB-Daten werden beim Einfügen in die Datenbank geändert? Datenbankprogrammierung 5
D MySQL Problem beim einfügen von Double-Zahlen Datenbankprogrammierung 4
Eldorado MySQL Hibernate - neuen Datensatz einfügen Datenbankprogrammierung 2
C Variable in MySQL einfügen Datenbankprogrammierung 2
S Daten einer Tabelle vergleichen und ggs neuen Wert einfügen Datenbankprogrammierung 8
M Keine doppelten Datensätze einfügen Datenbankprogrammierung 24
M SQL Abfrage in jTable einfügen Datenbankprogrammierung 8
S Bilder in Oracledatenbank einfügen Datenbankprogrammierung 5
G Problem beim einfügen in der Datenbank Datenbankprogrammierung 4
K Daten in Datenbanken einfügen Datenbankprogrammierung 6
E [SQL, Oracle] Zeile einfügen Datenbankprogrammierung 8
M JDBC: Viele Datensätze in Tabelle einfügen: Wie? Datenbankprogrammierung 7
T Tabelle in datenbank einfügen Datenbankprogrammierung 2
D Tabelle eine Zeile einfügen. Datenbankprogrammierung 3
A Blob in Oracle-DB einfügen (veraltete Methode) Datenbankprogrammierung 3
thE_29 Tool zum Einfügen in Oracle DB Datenbankprogrammierung 16
C Datensatz einfügen und quittierung Datenbankprogrammierung 31
N Datenbank in diese Klasse einfügen Datenbankprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben