2016-07-27 9 views
0

Ich habe dieses Problem mit Java mit MySQL.Fehler SQL-Syntax mit Abfrage Java

PreparedStatement paisyprovincia_BBDD = bd.prepareStatement("SELECT id=? FROM tabla=? WHERE ? = ?"); 

paisyprovincia_BBDD.setString(1, "id"); 
paisyprovincia_BBDD.setString(2, "pais"); 
paisyprovincia_BBDD.setString(3, "paisnombre"); 
paisyprovincia_BBDD.setString(4,country.getSelectionModel().getSelectedItem().toString()); 

gibt diesen Fehler zurück:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''pais' WHERE 'paisnombre' = 'Australia'' at line 1

wo ist das Problem? Danke für die Antworten

+0

Ist 'tabla' den Namen der Tabelle? Denke nicht, dass es eine Variable für die Tabelle akzeptiert, die du abfragst. –

+0

Auch was ist die Abfrage wie Sie gegen die Datenbank ausführen möchten? –

+0

Nein, Tabla ist die Variable, der Name der Tabelle ist 'pais' oder ich liege falsch? –

Antwort

3

Sie müssen nur

PreparedStatement paisyprovincia_BBDD = bd.prepareStatement("SELECT id FROM pais WHERE paisnombre = ?");  
paisyprovincia_BBDD.setString(1,country.getSelectionModel().getSelectedItem().toString()); 

Wenn Sie Variablen verwenden für die Namen der Spalten möchten, können Sie, dass bei der „Java-Ebene“ tun können, anstatt die „SQL-Ebene“. Der Punkt hier ist, dass der JDBC-Treiber die von Ihnen bereitgestellte SQL (möglicherweise) vorkompiliert und eine kompilierte native Datenbankabfrage wieder verwendet. Das geht nicht, wenn sich der Spaltenname ändert. So könnten Sie tun:

private List<String> getValuesFromDB(String columnName) { 

    String sql = String.format("SELECT %s FROM pais WHERE paisnombre = ?", columnName); 

    PreparedStatement paisyprovincia_BBDD = bd.prepareStatement(sql);  
    paisyprovincia_BBDD.setString(1,country.getSelectionModel().getSelectedItem().toString()); 

    // execute etc... 
} 
+0

ok, also kann ich den Namen der Spalte nicht verwenden als Variable? Weil ich den Code später wiederverwenden möchte und die Spalte, die zurückgibt, oder die Spalte, die ich in WHERE verwende, ändern können? –

+0

Siehe aktualisierte Antwort –

+0

Vielen Dank James –

1

Verwenden Sie diese als SQL-Anweisung:

bd.prepareStatement("SELECT id FROM pais WHERE paisnombre = ?"); 
paisyprovincia_BBDD.setString(1, country.getSelectionModel().getSelectedItem().toString()); 
+0

ok, also kann ich den Namen der Spalte nicht als Variable verwenden? weil ich den Code später wiederbenutzen und die Spalte ändern möchte, weiß ich nicht, wenn ich sehr gut erkläre –

+0

Wenn Sie eine andere Spalte zurückholen müssen, ändern Sie einfach das SQL, wie James in den Kommentaren der Frage sagte, nur die Parameter sollten Variablen sein , alles andere sollte fest codiert sein. – Julian

+0

Oh, ok, vielen Dank! –