# Vector in hsqldb schreiben



## Guest (19. Mai 2005)

Hallo,
ich versuche schon seit längeren Objecte in meine hsyldb zu schrieben. Aber es klappt einfach nicht.

Hier ist die Exception:
java.sql.SQLException: Wrong data type: hexadecimal string contains non hex character
	at org.hsqldb.jdbc.jdbcUtil.sqlException(Unknown Source)
	at org.hsqldb.jdbc.jdbcStatement.fetchResult(Unknown Source)
	at org.hsqldb.jdbc.jdbcStatement.executeQuery(Unknown Source)
	at start.main(start.java:4696)

Ich verstehe aber nicht warum diese exception kommt.
Da meine Inhalt Spalte die im Code benutzt wird den Typ LONGVARBINARY hat und ich einen BinaryStream hineinschreibe.

Hat jemand einen Tipp für mich wie ich dem Fehler auf die Spur kommen könnte!?

Hier ist der Code:

```
public static void main(String[] args)
	{
		 try
		{
			Class.forName ("org.hsqldb.jdbcDriver");
 
                           String db_url = "jdbc:hsqldb:http://192.168.0.3:81";
			Connection my_con = DriverManager.getConnection(db_url, "sa", "");
			
			
			Vector vec = new Vector();

			vec.add(new Integer(2));
			vec.add(new Integer(5));
			vec.add(new Integer(4));
			vec.add(new Integer(3));
			vec.add(new Integer(2));
			vec.add(new Integer(5));
			vec.add(new Integer(4));
			vec.add(new Integer(3));
			
			
			ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
			ObjectOutputStream in = new ObjectOutputStream(baos); 
			in.writeObject(vec); 
			ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); 
			
			PreparedStatement ps = my_con.prepareStatement("UPDATE table SET inhalt=? WHERE id = 2"); 			ps.                                   ps.setBinaryStream(1, bais, bais.available()); 
			ps.executeUpdate(); 
			ps.close();
			
			my_con.close();

			
		} catch (SQLException e1)
		{
			e1.printStackTrace();
		} 
		catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		catch (ClassNotFoundException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
     }
```

mfg Florian Schenk


----------



## Bleiglanz (20. Mai 2005)

in.close() nicht vergessen [bevor du toByteArray machst...]

ansonsten ist das der falsche Code, da ist nirgens ein executeQuery...


----------



## abollm (20. Mai 2005)

Bleiglanz hat gesagt.:
			
		

> in.close() nicht vergessen [bevor du toByteArray machst...]
> 
> ansonsten ist das der falsche Code, da ist nirgens ein executeQuery...



dafür aber ein executeUpdate...


----------



## Bleiglanz (20. Mai 2005)

at start.main(start.java:4696)


----------



## abollm (20. Mai 2005)

Bleiglanz hat gesagt.:
			
		

> at start.main(start.java:4696)



Kann ja ein Code-Ausschnitt sein.

Außerdem ist 


```
... ps.                                   ps.setBinaryStream(1, bais, bais.available());
```

auch ganz nett.


----------



## Guest (21. Mai 2005)

Danke für die Antworten!
Hab jetz raus bekommen woran es lag. Und zwar hab ich weiter oben im Prog einen String in den LONGVARBINARY geschrieben.

Hierzu [at start.main(start.java:4696)] ist zu sagen das es nur ein Codeausschnitt war und ich ne menge Zeilen raus genommen hatte.

Und diese Zeile [... ps.                                   ps.setBinaryStream(1, bais, bais.available());] war falsch kopiert;-)

Also nochmal Danke! ciao


----------

