In Java kann es beim Ausführen einer Abfrage mit PreparedStatement zu einer MySQLSyntaxErrorException mit der Fehlernummer 1064 kommen, die auf einen Syntaxfehler in der Nähe von „?“ hinweist. Dies kann passieren, obwohl die Abfrage in einem MySQL-Abfragebrowser mit ersetzten Werten funktioniert.
Bei näherer Betrachtung wird deutlich, dass MySQL das „?“ nicht interpretieren kann. Platzhalter in der SQL-Abfrage, da die Syntax ungültig ist. Dies liegt daran, dass PreparedStatement diese Platzhalter nicht ersetzt hat.
Der von Ihnen geteilte Codeausschnitt überschreibt fälschlicherweise die vorbereitete Abfrage mit der Originalversion. Um dies zu beheben, verwenden Sie PreparedStatement#executeQuery() anstelle von Statement#executeQuery(String):
PreparedStatement s = conn.prepareStatement(query); s.setInt(1, intValue); s.setString(2, strValue); rs = s.executeQuery(); // Correct
Hinweis: Obwohl dies nicht mit dem aktuellen Problem zusammenhängt, kann Ihr Code das Problem nicht schließen Verbindung, Anweisung und ResultSet. Dieses Versäumnis kann zur Erschöpfung der Ressourcen und zum anschließenden Absturz der Anwendung führen. Implementieren Sie die richtige JDBC-Sprache, indem Sie diese Objekte in einem „finally“-Block schließen:
try (Connection conn = DriverManager.getConnection(...); PreparedStatement s = conn.prepareStatement(...); ResultSet rs = s.executeQuery()) { // Query execution code } finally { if (rs != null) rs.close(); if (s != null) s.close(); if (conn != null) conn.close(); }
Das obige ist der detaillierte Inhalt vonWarum erhalte ich bei MySQL PreparedStatements einen „Syntaxfehler in der Nähe von „?''?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!