# insert befehl funzt nicht!wo ist der fehler?



## MASTERmind (9. Mai 2006)

Die Spaltennamen in der postgres DB heissen:
Name, Vorname, Geburtsdatum, DWZ und Punkte

Ich versuche über folgenden Code Einträge aus einem JTextField an die DB zu übergeben....erhalte aber die Fehlermeldung: sun.jdbc.odbc.JdbcOdbcBatchUpdateException: ERROR:  column "dwz" does not exist


Die Spalte gibts aber!


```
neuerName = nameField.getText();
    neuerVorname = vornameField.getText();
    neueDWZ = dwzField.getText();
    neuerPunkt = punkteField.getText();
    neuesDatum = datumField.getText();
    
    Vector vec = new Vector();
    vec.addElement(neuerName);
    vec.addElement(neuerVorname);
    vec.addElement(neuesDatum);


    vec.addElement(neueDWZ);
    vec.addElement(neuerPunkt);


    model.addRow(vec);
    
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    String url = "jdbc:odbc:PostgreSQL";

    Connection con = DriverManager.getConnection(url, "xxx", "xxx");
    int updateCounts[] = null;

  try
  {
    Statement s = con.createStatement();
    s.addBatch( "INSERT INTO testschema.spieler VALUES ( 'neuerName',  'neuerVorname', 'neuesDatum'  , DWZ = 'neueDWZ', neuerPunkt)");

    updateCounts = s.executeBatch();
  }
  catch ( BatchUpdateException e )
  {
    System.out.println(e);

  }
  catch ( SQLException e )
  {
    System.out.println(e);

  }
 }
```


----------



## SamHotte (9. Mai 2006)

in Zeile 29 gehört das "DWZ = " evtl. nicht hinein?


----------



## MASTERmind (9. Mai 2006)

nun gut...dann kommt folgende exception: sun.jdbc.odbc.JdbcOdbcBatchUpdateException: ERROR:  invalid input syntax for type date: "neuesDatum"

gebe das datum in folgender form ins textfield ein: yyyy-mm-dd wie auch in der db abgespeichert...muss ich diesen resultierenden string noch casten als date?

dachte die db packt das oder wo hakts?


----------



## SamHotte (9. Mai 2006)

Wenn's in der Datenbank als String liegt, brauchst du net zu casten. Wenn's als DATE in der DB liegt, dann solltest du vielleicht ein PreparedStatement mit '.setDate(xx)' befüllen, anstelle den String zusammenzufrickeln und dabei zu raten, welches Format er denn wohl haben müsse.


----------



## MASTERmind (9. Mai 2006)

und dieses setDate(xxx) sehe wie genau aus in diesem fall?


----------



## SamHotte (9. Mai 2006)

anstelle von 'Statement' benutzt du ein 'PreparedStatement', das dann so aussieht:

```
INSERT INTO tabelle VALUES (?, ?, ?)
```
(wenn du drei Spalten hast) bzw.

```
INSERT INTO tabelle (spalte1, spalte2) VALUES (?, ?)
```
(wenn du nur ausgewählte Spalten benutzt).

Das PreparedStatement befüllst du dann mit den dem Datentyp entsprechenden Befehlen (siehe API).

Bei dem Datentyp DATE kann es allerdings auch noch Probleme mit dem JDBC-Treiber bzw. der JDBC-ODBC-Bridge geben -- zumindest habe ich diese mit MS Access gehabt (und dann das Datum doch als String in die Datenbank geschrieben)...


----------

