# Problem Array in BLOB-Feld in DerbyDB zu speichern



## MarcBa (6. Mai 2010)

Hallo,

ich hab hier über die Suche folgende Lösung gefunden.
Leider bekomme ich Compilefehler bei den letzten 2 Zeilen.
setBinaryStream und executeUpdate unterstreicht mir mein Netbeans rot, mit folgenden Fehlermeldungen:
"cannot find symbol
symbol: method setBinaryStream(int,java.io.ByteArrayInputStream,int)"
und
"cannot find symbol
symbol: method executeUpdate()"

Importe sind alle drin.

Woran könnte das liegen?



```
// Schreiben

PreparedStatement stat = (PreparedStatement) conn.prepareStatement(
   "UPDATE Tabelle SET spielfeld = ? WHERE spiel_ID = 'spiel1"     
);


String [] zt = {"A","B","C"};
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream out;
            try {
                out = new ObjectOutputStream(bout);
                out.writeObject(zt);
                out.flush();
            } catch (IOException ex) {
                Logger.getLogger(SchnappiGameSetup.class.getName()).log(Level.SEVERE, null, ex);
            }


stat.setBinaryStream(3, new ByteArrayInputStream(bout.toByteArray()), bout.size());
stat.executeUpdate();
```

Vielen Dank für euere Antworte!


----------



## SlaterB (7. Mai 2010)

merkwürdiges Vorgehen,
hast du jemals PreparedStatement oder JDBC länger genutzt, jemals mit PreparedStatement ein UPDATE ausgeführt?
dass die Methode executeUpdate(); fehlt ist doch ein so elementar schrecklicher Fehler, da ist alles andere fast egal

wie kommst du nun darauf, das mit einem komplizierten Blob zu testen?
mit komplizierten Streams, mit komplizierten Logging, wieso heißt der Titel 
'Problem Array in BLOB-Feld in DerbyDB zu speichern'
und nicht
'wieso funktioniert bei mir PreparedStatement nicht'?
als Code allerhöchstens die denkbar einfachste Variante


```
PreparedStatement stat = (PreparedStatement) conn.prepareStatement(
   "UPDATE Tabelle SET test=2"
);
stat.executeUpdate();
```
alles andere ist doch ganz unerheblicher Nebenkram 

--------------

so, 
dass die Methode  executeUpdate() fehlt ist wirklich ungewöhnlich,
merkwürdig ist dazu dass du (PreparedStatement) castest, normalerweise müsste doch
PreparedStatement stat = conn.prepareStatement(..); 
reichen

aber selbst wenn du eine andere PreparedStatement-Klasse/ Interface hast,
wenn der Cast funktioniert, dann müsste die Methode eigentlich da sein..

was ist PreparedStatement genau?
was kommt bei
System.out.println(PreparedStatement.class); 
raus (Rest auskommentieren)

wie sehen die Importe der Klasse aus, deren Ausschnitt du gepostet hast?
welche Libraries/ Jars/ JDBC-Treiber verwendest du?


----------



## MarcBa (7. Mai 2010)

Ich hab nach einer möglichkeit gesucht Arrays in einem Datenbankfeld zu speichern, auf diese Lösung bin ich hier im Forum gestoßen.
Leider funktioniert das nicht bei mir.

Ich weiss auch nicht warum ich (PreparedStatement) casten muss, aber anderes bekomm ich einen Fehler.

Importe:

```
import java.awt.event.KeyEvent;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.StringReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.derby.iapi.sql.PreparedStatement;
```

welche Libraries/ Jars/ JDBC-Treiber verwendest du? 

nur derby.jar

Wenn ich heute Mittag mehr zeit hab teste ich dein sout!


----------



## SlaterB (7. Mai 2010)

import org.apache.derby.iapi.sql.PreparedStatement;
->
import java.sql.PreparedStatement;


> aber anderes bekomm ich einen Fehler.

welchen?


----------



## MarcBa (7. Mai 2010)

Alles klar, lag wohl am Import!

Jetzt bekomm ich keine Fehler mehr und muss auch nicht mehr extra casten!

Vielen Dank!


Wenn du aber eine bessere Methode kennst ein Array in ein Datenbankfeld zu speichern kannst du mir sie gerne sagen!?


----------



## SlaterB (7. Mai 2010)

wenn es funktioniert kann man es doch erstmal nehmen,

schöner ist vielleicht ein einfacher String, kommagetrennt oder XML, falls es wirklich ein String-Array ist


----------

