# Mit Prepared Statement in MDB schreiben



## Gast00007 (8. Dez 2008)

Hallo,

ich versuche mittels eines PreparedStatements einen Datensatz in eine MDB Datei zu schreiben... Nur leider klappt das nicht so ganz...

Folgender Code:


```
private void setMitarbeiter() {
		
		try {
	    	con = DBConn.openDB();			
		    System.out.println("Connection Successful ");
	    } catch (Exception e) {	    	
	    	e.printStackTrace();
	    	System.out.println("Keine Verbindung zur Datenbank");
	    }
	    try {
	    	PreparedStatement speicherMitarbeiter = con.prepareStatement( 
	    	  "INSERT into PERSONAL values ('?','?','?','?','?','?','?','?','?')");
	    	System.out.println(nachname.getText());
	    	speicherMitarbeiter.setString( 1, "Nachname" ); 
	    	speicherMitarbeiter.setString( 2, "Vorname" );
	    	speicherMitarbeiter.setString( 3, "position" );
	    	speicherMitarbeiter.setString( 4, "Gebdatum" );
	    	speicherMitarbeiter.setString( 5, "Einstdatum" );
	    	speicherMitarbeiter.setString( 6, "Strasse" );
	    	speicherMitarbeiter.setString( 7, "plz" );
	    	speicherMitarbeiter.setString( 8, "ort" );
	    	speicherMitarbeiter.setString( 9, "tel" );
	    	speicherMitarbeiter.executeUpdate();
	    	System.out.println(speicherMitarbeiter.toString());
	    	
	    	speicherMitarbeiter.close();
	    	con.close();
	    	System.out.println("Datenbankverbindung getrennt");
	    	
	    }catch (Exception e) {
	    	
	    }
```

Dazu erhalte ich folgende Ausgabe vom JDBC Treiber, sobald ich die Methode ausführe:



> DriverManager.getConnection("jdbcdbcRIVER={Microsoft Access Driver (*.mdb)};DBQ=C:\db.mdb")
> trying driver[className=sun.jdbc.odbc.JdbcOdbcDriver,sun.jdbc.odbc.JdbcOdbcDriver@186db54]
> *Driver.connect (jdbcdbcRIVER={Microsoft Access Driver (*.mdb)};DBQ=C:\db.mdb)
> JDBC to ODBC Bridge: Checking security
> ...



Ich hoffe, mir kann jemand sagen, was ich falsch mache...

Danke schonmal!

Grüße
Der (noch)Gast


----------



## Guest (8. Dez 2008)

Mach die ganzen Anführungszeichen weg
	
	
	
	





```
('?','?','?','?','?','?','?','?','?')
```
Der Treibär macht es schon für dich, wenn du die entsprechenden setWasAuchImmer Methoden aufrufst.


----------



## Guest (9. Dez 2008)

Hi,

vieen Dank. Das hat schonmal geholfen. Nur jetzt bekomme ich folgende Meldung:



> PreparedStatement.executeUpdate
> *PreparedStatement.execute
> Free statement (SQLFreeStmt), hStmt=58270504, fOption=0
> Executing (SQLExecute), hStmt=58270504
> ...



Kann es sein, dass das etwas damit zu tun hat, dass zwei Felder in der MDB-Datei als "Date" deklariert sind?
Wie muss ich das dann handhaben?
Oder ist das ein ganz anderes Problem?

Danke und Gruß


----------



## foobar (9. Dez 2008)

Anonymous hat gesagt.:
			
		

> Hi,
> 
> vieen Dank. Das hat schonmal geholfen. Nur jetzt bekomme ich folgende Meldung:
> 
> ...


Wenn das Feld in der DB vom Typ Date ist mußte im PreparedStatement auch setDate und nicht setString benutzen.


----------



## bronks (9. Dez 2008)

foobar hat gesagt.:
			
		

> ... Wenn das Feld in der DB vom Typ Date ist mußte im PreparedStatement auch setDate und nicht setString benutzen.


Grundsätzlich korrekt, aber leider kann nichteinmal der ODBC-Treiber für den SQL Server 2005 ein setDate verarbeiten, deshalb nehme ich an, daß es der AccessTreiber erst recht nicht kann. Es kann sein, daß ich falsch liege, aber ich meine damit schon mal herumexperimentiert zu haben und dabei kam heraus, daß Access kein Prepare durchführen kann.


----------



## foobar (9. Dez 2008)

bronks hat gesagt.:
			
		

> foobar hat gesagt.:
> 
> 
> 
> ...



Hmm, komische Microsoftwelt. Dann würde ich zumindest versuchen, daß Date im setString korrekt zu formatieren.


----------



## Guest (10. Dez 2008)

Hi,

setDate habe ich noch nicht versucht (ups). Bei setString habe ich allerdings schon dafür gesorgt, dass das Datum im richtigen und erwarteten Format mitgegeben wird. Das hat jedoch nicht funktioniert...

Also wenn das jetzt mit setDate nicht funktioniert, kann ich das preparedStatement vergessen und muss das mit nem normalen Statement machen? Habe ich das richtig verstanden?

Grüße


----------



## foobar (11. Dez 2008)

Anonymous hat gesagt.:
			
		

> Hi,
> 
> setDate habe ich noch nicht versucht (ups). Bei setString habe ich allerdings schon dafür gesorgt, dass das Datum im richtigen und erwarteten Format mitgegeben wird. Das hat jedoch nicht funktioniert...
> 
> ...


Ja, sieht so aus. Normalerweise muß setDate funktionieren, aber bei Access anscheinend nicht.


----------

