Vorbereitete Java-Anweisungen: Fehlerbehebung bei SQL-Syntaxfehlern mit „?“ Platzhalter
Die Verwendung der vorbereiteten Anweisungen von Java führt häufig zu „SQL-Syntaxfehler“-Meldungen, die häufig auf die falsche Verwendung von Platzhaltern (?
) zurückzuführen sind. Sehen wir uns ein häufiges Szenario an:
Der folgende Java-Codeausschnitt zeigt einen falschen Ansatz:
<code class="language-java">String searchPerson = "select * from persons where surname like ? and name like ?"; statement.executeQuery(searchPerson); </code>
Die Zeichenfolge searchPerson
definiert die SQL-Abfrage korrekt mit Platzhaltern für surname
und name
. Die direkte Übergabe von searchPerson
an statement.executeQuery()
ist jedoch die Fehlerquelle. executeQuery()
erwartet eine vorbereitete Anweisung, die bereits mit ihren Parametern eingerichtet ist; Der SQL-String wird nicht als Parameter akzeptiert.
Die richtige Umsetzung:
Die Lösung liegt in der korrekten Bindung der Parameter vor der Ausführung der Abfrage. Die Methode executeQuery()
sollte nach der Parameterbindung ohne Argumente aufgerufen werden. Der korrigierte Code würde so aussehen (vorausgesetzt, surnameValue
und nameValue
enthalten die tatsächlichen Werte):
<code class="language-java">String searchPerson = "select * from persons where surname like ? and name like ?"; PreparedStatement statement = connection.prepareStatement(searchPerson); statement.setString(1, surnameValue); statement.setString(2, nameValue); ResultSet rs = statement.executeQuery(); // Execute without additional parameters // Process the ResultSet (rs) here</code>
Dieser überarbeitete Code erstellt zunächst ein PreparedStatement
-Objekt, legt dann die Parameterwerte mit setString()
fest und führt schließlich die Abfrage mit executeQuery()
aus, ohne die SQL-Zeichenfolge erneut zu übergeben. Dadurch wird sichergestellt, dass die Datenbank die Platzhalter korrekt interpretiert und Syntaxfehler vermieden werden.
Das obige ist der detaillierte Inhalt vonWarum verursacht „statement.executeQuery(searchPerson);' einen SQL-Syntaxfehler in Java Prepared Statements?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!