2016-07-31 28 views
-1

Ich habe den folgenden CodeSeltsames Verhalten von Java PreparedStatement

try{ 
    sql = "Select Time, Text WHERE Sender =?"; 
    PreparedStatement stmt = conn.prepareStatement(sql); 
    stmt.setString(1, "ABC"); 
    rs = stmt.executeQuery(); 
}catch(SQLException){ 
    System.out.println(e.getMessage()); 
} 

und die folgende Fehlermeldung erhalten:

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'WHERE Sender ='ABC'' at line 1

Es gibt eine extra ' in meiner SQL-Abfrage, wie kann ich das Problem lösen?

Antwort

4

Es ist nicht das "Extra" ', das ist das Problem. Sie brauchen das, damit Ihre Datenbank den von Ihnen bereitgestellten Text versteht.

Das Problem besteht darin, dass Sie eine SELECT-Anweisung ausgeben, die Felder aus einer Tabelle anfordert, die Sie nicht angegeben haben. Sie müssen die Tabellennamen hinzuzufügen:

Select Time, Text FROM <tablename here> WHERE Sender =? 

Edit: Offenbar MariaDB doesn't consider time and text as reserved words als @Andreas wies darauf hin, in einem Kommentar zu dieser Antwort.

+0

'TEXT' und' TIME' sind keine [reservierte Wörter in MariaDB] (https://mariadb.com/kb/en/mariadb/reserved-words/#exceptions): * Einige Schlüsselwörter sind Ausnahmen aus historischen Gründen, und sind als nicht-Anführungszeichen zulässig. Dazu gehören: ..., 'TEXT',' TIME', ... *. – Andreas