Heim > Datenbank > MySQL-Tutorial > Warum verursacht „statement.executeQuery(searchPerson);' einen SQL-Syntaxfehler in Java Prepared Statements?

Warum verursacht „statement.executeQuery(searchPerson);' einen SQL-Syntaxfehler in Java Prepared Statements?

Mary-Kate Olsen
Freigeben: 2025-01-11 15:22:41
Original
632 Leute haben es durchsucht

Why Does `statement.executeQuery(searchPerson);` Cause a SQL Syntax Error in Java Prepared Statements?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage