# Wie kann man BLOB-Spalten in DB2 einfügen?



## ebruss17 (20. Jan 2015)

Hallo Community,

ich habe eine Tabelle "Blob", die eine Spalte "ATTACHMENTS" beinhaltet, in der BLOBs gespeichert werden können. 

CREATE TABLE "BLOB" 
(	"B_ID" INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY ( START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 NO CYCLE CACHE 20),
		"L_ID" INTEGER NOT NULL,
		"ATTACHMENTS" BLOB(1048576) NOT NULL
	)

Wie kann ich in diese "ATTACHMENTS"-Spalte denn BLOB-Werte einfügen? Gibt man hier den Dateinamen beim INSERT an oder wie läuft es ab?


----------



## stg (20. Jan 2015)

Unabhängig davon, dass es in der Regel keine gute Idee ist große Dateien in der Datenbank abzulegen:
Wo und wie willst du denn Werte einfügen? Direkt als SQL statement absetzen? Per JPA? 
Per JDBC kannst du das z.B. Datenbankunabhängig mittels "setBinaryStream" einfach dein file in den InputStream hauen.


----------



## ebruss17 (20. Jan 2015)

ich möchte es direkt als INSERT INTO - Statement einfügen. Geht das so:?

INSERT INTO Blob (l_ID, Attachments) VALUES (1, blob('C:/Bild.bmp'))


----------



## Joose (20. Jan 2015)

Nein, SQL Statements werden direkt vom SQL Server ausgeführt. Der SQL Server wird somit nichts unter diesen Pfaden finden.

Verwende ein PreparedStatement und setze einfach die entsprechenden Parameter. Für das BLOB verwendest du dann einfach "setBinaryStream" wie stg schon gepostet hat.


----------



## ebruss17 (20. Jan 2015)

Hast du denn ein Beispiel dazu??


----------



## Joose (20. Jan 2015)

Hier ist ein Beispiel wie PreparedStatements zu verwenden sind: Using Prepared Statements (The Java™ Tutorials > JDBC(TM) Database Access > JDBC Basics)


----------



## ebruss17 (20. Jan 2015)

NEIN!!! Ich meine ein Beispiel mit einem setBinaryStream für BLOB-Werte!


----------



## Joose (20. Jan 2015)

Ok hier ein 2.Link PreparedStatement (Java Platform SE 7 ) (Dokumentation zu PreparedStatement).

*setBinaryStream()* ist eine Methode des PreparedStatement. Daher habe ich auch einen Link gepostet wie PreparedStatement zu verwenden ist. Deine Aufgabe ist das Beispiel zu verstehen und den benötigten Code an deine Bedürfnisse anzupassen.
Das wäre dir klar wenn du *nicht nur* unsere Beiträge* liest sondern auch* unsere Vorschläge* ausprobierst bzw. wenigstens googelst* was wir genau damit meinen.


----------



## ebruss17 (20. Jan 2015)

d.h. ich muss für jede Datei, die ich in die BLOB-Spalte hinzufügen möchte, ein eigenes setBinaryStream() machen? Kann man das denn nicht mit einem DB2 Command Line ausführen lassen als INSERT INTO??


----------



## Joose (20. Jan 2015)

ebruss17 hat gesagt.:


> d.h. ich muss für jede Datei, die ich in die BLOB-Spalte hinzufügen möchte, ein eigenes setBinaryStream() machen?



Woher leitest du diese Annahme ab?



ebruss17 hat gesagt.:


> Kann man das denn nicht mit einem DB2 Command Line ausführen lassen als INSERT INTO??



Wie schon oben gesagt lies dir das Beispiel auf folgender Seite durch: Using Prepared Statements (The Java™ Tutorials > JDBC(TM) Database Access > JDBC Basics)
Da wird das PreparedStatement im Zusammenhang mit einen UPDATE Statement verwendet, statt einem UPDATE Statement kannst du aber auch jedes andere verwenden -> DELETE, CREATE, SELECT, INSERT, ....

Rate nicht was du tun musst, sondern überlege logisch, probiere aus und dann probiere eine konkrete Frage zustellen.
(Auf Grund fehlender Grundlagen muss man sich bei deinen Beschreibungen/Fragen immer öfters überlegen was genau gemeint/gefragt ist)


----------

