Datentyp für Bilder aus einer DB

crazyPower

Mitglied
Hallo,

ich habe folgendes Probelm:
Ich hole aus einer IBM DB2 ein BLOB (Bild), und möchte das in ein Container-Objekt speichern, um den kompletten Datensatz als ObjectOutputStream übers Netzwerk rauszuhauen.
Nun meine Frage: Welchen Datentyp soll ich verwenden? BufferdImage brauch ich hier ja nicht, da das Bild nicht in einem SWING-Panel angezeigt werden muss. Soll ich das in ein ByteArray speichern? Nur wie finde ich raus, wie groß dieses Array werden muss?

Danke

cP
 
Hallo!

Lies das Bild doch einfach mittels eines InputStreams aus der DB aus und speichere die Daten in einem ByteArrayOutputStream.... danach rufst du am baos.toByteArray() auf und fertig.

gruß Tom
 
Danke. Hat soweit geklappt.

Jetzt habe ich noch ein weiteres Problem:
Ich möchte in einem ResultSet eine bestimmte row ansprechen, versuche ich das mittels
rs.absolute(1);
bekomme ich aber folgende SQLException:
java.sql.SQLException: [IBM][JDBC-Treiber] CLI0627E In der Ergebnismenge kann nicht geblättert werden.

Wie kann ich dann eine Zeile ansprechen. Ich kann einfach nicht glauben, dass ich extra eine Schleife mit next() machen muss, und dann break wenn ich meine zeile erreicht habe.....


cu

cP
 
Hallo!

Dann versuchs mal über den enstprechenden ResultSet Typ beim erstellen eines Statement Objekts über die Connection:

public Statement createStatement(int resultSetType,
int resultSetConcurrency,
int resultSetHoldability)
throws SQLException

Creates a Statement object that will generate ResultSet objects with the given type, concurrency, and holdability. This method is the same as the createStatement method above, but it allows the default result set type, concurrency, and holdability to be overridden.

Parameters:
resultSetType - one of the following ResultSet constants: ResultSet.TYPE_FORWARD_ONLY, ResultSet.TYPE_SCROLL_INSENSITIVE, or ResultSet.TYPE_SCROLL_SENSITIVE
resultSetConcurrency - one of the following ResultSet constants: ResultSet.CONCUR_READ_ONLY or ResultSet.CONCUR_UPDATABLE
resultSetHoldability - one of the following ResultSet constants: ResultSet.HOLD_CURSORS_OVER_COMMIT or ResultSet.CLOSE_CURSORS_AT_COMMIT
Returns:
a new Statement object that will generate ResultSet objects with the given type, concurrency, and holdability
Throws:
SQLException - if a database access error occurs or the given parameters are not ResultSet constants indicating type, concurrency, and holdability
Since:
1.4

Gruß Tom
 
Hi,

so langsam komm ich mir etwas blöd vor... hier mal meine Klasse:

Code:
  public class exec_sql_statement {
  exec_sql_statement(dbconn dbc1, String sqlquery){
   		this.befehlstext = sqlquery;
   		
 		this.dbc1 		 		= dbc1 ;
 		Connection verbindung			= dbc1.get_connection();
   		try{
 		prepare 			 = verbindung.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
   	
   		}catch (Exception e){System.out.println(e);}	
   		
   		try{
   		 
 			 ergebnismenge		= prepare.executeQuery(befehlstext);
 			 metadaten 			= ergebnismenge.getMetaData();
 			 anzahlds			= ergebnismenge.getFetchSize();
 			 anzahlSpalten	 = metadaten.getColumnCount();
   
   			 
   			 Buch[] Bucharray = new Buch[anzahlds];
   			 for (int i=0; i<anzahlds;i++){
 			 	Bucharray[i] = new Buch(ergebnismenge, metadaten, anzahlSpalten, i+1);
 			 } // hier übergebe ich das ResultSet an die Klasse Buch
   .
   .
   .

Die Verbindung zur DB ect. funktioniert alles prächtig. nur kann ich in der Klasse "Buch" die Zeilen nicht direkt anspringen, obwohl das RS Scrollable ist. Wieso?
Ich übergebe doch nur die Referenz, nicht das Objekt selbst.....

Langsam habe ich das Gefühl, dass das IBM nicht implementiert hat...

Danke für deine Ausführlich hilfe...

cu

cP
 
Zurück