# String[][] Array in Access Datenbank speichern



## developer (10. Apr 2007)

Hallo,

ich habe schon das Forum nach Blob u.ä. untersucht, jedoch zu keiner Lösung gefunden.

Ich habe eine Access DB mit 8 Feldern, wobei das 8. Feld ein OLE, also BLOB Feld ist.

Nun möchte ich eine String[][] reinschreiben, was auch funktioniert:


```
public void operationtest() throws IOException, SQLException {
		Connection conn = getConnection();
		Statement stat = conn.createStatement();

		String [] zt = {"A","B","C"};
		
		ByteArrayOutputStream bout = new ByteArrayOutputStream();
		ObjectOutputStream out = new ObjectOutputStream(bout);
		out.writeObject(zt);
		out.flush();
		byte b [] = bout.toByteArray(); 
		
		stat.execute("INSERT INTO rechnungen VALUES ('1022','44','3','3','2006','Test','Test','"+b+"')");
				
		stat.close();
		conn.close();
		
	}
```


Das Problem liegt nun beim Auslesen:

Mit folgendem Code bekomme ich immer eine Fehlermeldung (java.io.StreamCorruptedException: invalid stream header)


```
.
.
.

Connection conn = getConnection();
	Statement stat = conn.createStatement();
	
	ResultSet result=stat.executeQuery(command);

	byte b[];
    ObjectInputStream in;

	//Datenbank wird in ArrayList eingelesen

	
	while(result.next()){
	
		int tmp=result.getInt(1); 
		String tmp1=result.getString(2);
		String tmp2=result.getString(3);
.
.
.
		
		arrayR.get(0).add(0, tmp);
		arrayR.get(1).add(0, tmp1);
.
.
.
		
		
		b = result.getBytes(8); 
		in = new ObjectInputStream(new ByteArrayInputStream(b));
        int []zt = (int[])in.readObject(); 
		
        System.out.println(zt);
```

wo liegt der fehler?

Bin um jede Hilfe dankbar!!!


----------



## Guest (10. Apr 2007)

ps.

dieses beispiel ist natürlich String[] zum ausprobieren.

wie verhält es sich mit String[][]?


----------



## developer (11. Apr 2007)

weiß keiner einen rat?


----------



## Guest (11. Apr 2007)

Deine Schreibmethode funktioniert nicht.


```
// Schreiben

PreparedStatement stat = connection.prepareStatement(
   "INSERT INTO Rechnungen"
);

stat.execute("INSERT INTO rechnungen (Feldname1, Feldname2, BlobFeld) VALUES (?, ?, ?)");
stat.setString(1, ...);
stat.setString(2, ...);

String [] zt = {"A","B","C"};
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bout);
out.writeObject(zt);
out.flush();

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

stat.executeUpdate();

// Lesen

while(result.next()){
   ...
   ObjectInputStream in = new ObjectInputStream(result.getBinaryStream("blobFeld"));
   String[] zt = (String[])in.readObject();
```


----------



## Guest (11. Apr 2007)

:autsch: Jetzt aber

```
// Schreiben

PreparedStatement stat = connection.prepareStatement(
   "INSERT INTO rechnungen (Feldname1, Feldname2, BlobFeld) VALUES (?, ?, ?)"
);

stat.setString(1, ...);
stat.setString(2, ...);

String [] zt = {"A","B","C"};
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bout);
out.writeObject(zt);
out.flush();

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

stat.executeUpdate();

// Lesen
while(result.next()){
   ...
   ObjectInputStream in = new ObjectInputStream(result.getBinaryStream("blobFeld"));
   String[] zt = (String[])in.readObject();
```


----------



## developer (12. Apr 2007)

DANKE ! Funktioniert


----------

