Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQLSyntaxErrorException in der Nähe von ? beim Versuch, PreparedStatement auszuführen

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, auf die richtige Syntax für die Verwendung in der Nähe von „? oder Mitgliedsname =?' in Zeile 1

MySQL versteht die Bedeutung von ? nicht in der SQL-Abfrage. Es ist tatsächlich eine ungültige SQL-Syntax. Also irgendwie wurde es nicht durch PreparedStatement ersetzt . Und weißt du was?

PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, intValue);
s.setString(2, strValue);        
rs = s.executeQuery(query); // Fail!

Sie überschreiben die vorbereitete Abfrage mit der ursprünglichen Abfrage! Sie müssen den argumentlosen PreparedStatement#executeQuery() Methode anstelle von Statement#executeQuery(String) .

PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, intValue);
s.setString(2, strValue);        
rs = s.executeQuery(); // OK!

Unabhängig vom Problem verliert Ihr Code Ressourcen. Die DB wird nach einigen Stunden aufgebraucht sein und Ihre Anwendung wird abstürzen. Um dies zu beheben, müssen Sie dem JDBC-Idiom zum Schließen von Connection folgen , Statement und ResultSet im finally Block des try blockieren, wo sie erworben wurden. Sehen Sie sich das Grundlegende Tutorial zu JDBC an für mehr Details.