2017-12-16 4 views
-1

Hallo Ich habe ein Problem mit meiner Syntax in meinem Java-Code. Ich habe eine tableview, die ihre Daten aus einer SQL-Datenbank bezieht. Ich habe 3 Tabellen in der Datenbank book, customer, order erstellt. Wenn ich auf eine Schaltfläche klicke, nehme ich die ausgewählten Bücher und füge sie zur Tabelle order hinzu.
Hier ist der Code aus dem Hauptprogramm (die Methode von db Aufruf):Java JDBC Derby Syntax Fehler

if(table.getSelectionModel().getSelectedItems().iterator().hasNext()) { 
        db.insertOrder(new Bestellung(customerid,table.getSelectionModel().getSelectedItems().iterator().next())); 

Die Tabelle book ist festgelegt. Nur die zwei anderen Tabellen customer, order sind dynamisch.

Das Problem:

Ich schaffe die Werte in der Tabelle order wie diese

String ct = "CREATE TABLE Order (" + "Order_Id integer generated always as identity, " + "CUSTOMER_ID BIGINT" + "ISBN, CHAR(13) " + "PRIMARY KEY(Order_Id))"; 

und so weiter ...

ich einfügen in order Tabelle wie folgt. (Hier ist die Syntax Problem in der String i, die die Position ist, wo der Compiler sagt, es funktioniert nicht ..)

String i = "INSERT INTO ORDER(CUSTOMER_ID,ISBN), VALUES(?,?)"; 
    Connection conn = null; 
    PreparedStatement stmt = null; 
    try { 
     conn = DriverManager.getConnection(connString); 
     stmt = conn.prepareStatement(i); 
     conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 
     stmt.setLong(1, order.getCustomerId()); 
     stmt.setString(2, order.getBuch().getISBN()); 
     stmt.executeUpdate(); 
    } catch (SQLException e) { 
     System.out.println(e.getMessage()); 
     e.printStackTrace(); 
    } 
    finally { 

     try { 
      if (stmt != null) 
       stmt.close(); 
      if (conn != null) 
       conn.close(); 
     } catch (SQLException e) { 
      System.out.println(e.getMessage()); 
      e.printStackTrace(); 
     } 
    } 

und hier ist die Syntax-Fehler, die ich

Syntax error: Encountered "ORDER" at line 1, column 13.

Also habe, wie zu tun Ich muss meine Syntax in der string i korrigieren? Hat jemand irgendwelche Ideen?

+0

können Sie eine Tabelle mit dem Namen Order erstellen? –

+0

Oh, der Name 'Bestellung' war auch nicht möglich. Scheint, als ob dieses Wort in SQL – Ikarus

+0

reserviert ist, habe ich es geändert. jetzt funktioniert es dank – Ikarus

Antwort

1
INSERT INTO ORDER(CUSTOMER_ID,ISBN), VALUES(?,?) 
           ^

Das Komma ist überflüssig. Auch in Ihrem CREATE TABLE

... + "ISBN, CHAR(13) " + ... 
     ^

Das Komma ist auch fremd.

+0

es hat funktioniert – Ikarus

0

Wenn Sie reservierte Wörter/Keywords als Tabellenname verwenden, sollten Sie:

  1. MySQL: Verwendung ", wie: select * from 'Order'
  2. Oracle, PostgreSQL: Verwendung", wie: select * from "Order"

Aber es schlechte Praxis ist, versuchen Sie Ihren Tabellennamen zu ändern.

Sie haben einen anderen Fehler, dass ein Sagte bei @ Jim Garrison.