insert befehl funzt nicht!wo ist der fehler?

Status
Nicht offen für weitere Antworten.

MASTERmind

Bekanntes Mitglied
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!

Code:
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);

  }
 }
 
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?
 
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.
 
anstelle von 'Statement' benutzt du ein 'PreparedStatement', das dann so aussieht:
Code:
INSERT INTO tabelle VALUES (?, ?, ?)
(wenn du drei Spalten hast) bzw.
Code:
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)...
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben