Beim Versuch, eine Abfrage mit PreparedStatement in Java auszuführen, tritt ein Fehler auf, der auf einen Syntaxfehler in der Nähe von „?“ hinweist. Die Ausnahme ist:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 '? or MemberName = ?' at line 1
String query = "select MemberID, MemberName from members where MemberID = ? or MemberName = ?"; Connection conn = DriverManager.getConnection(DATABASE_URL, USERNAME, PASSWORD); PreparedStatement s = conn.prepareStatement(query); s.setInt(1, 2); s.setString(2, "zen"); ResultSet rs = s.executeQuery(query); // Fail!
Der Fehler tritt auf, weil MySQL das „?“ nicht erkennt. in der SQL-Abfrage als Platzhalter. Dies ist auf den folgenden Aufruf zurückzuführen:
rs = s.executeQuery(query); // Fail!
Anstatt PreparedStatement#executeQuery ohne Argumente zu verwenden, wird die ursprüngliche Abfragezeichenfolge übergeben, die die vorbereitete Anweisung überschreibt.
Um das Problem zu beheben , dieexecuteQuery-Methode von PreparedStatement sollte ohne Argumente aufgerufen werden:
rs = s.executeQuery(); // OK!
Obwohl es nichts mit dem ursprünglichen Problem zu tun hat, verliert der Code Ressourcen. Um dies zu verhindern, sollten Ressourcen mit der JDBC-Sprache geschlossen werden:
try { // Acquire resources here } catch (Exception e) { // Handle exception } finally { // Close resources here }
Das obige ist der detaillierte Inhalt vonWarum wirft mein PreparedStatement in Java einen MySQL-Syntaxfehler in der Nähe von „?' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!