Heim  >  Artikel  >  Datenbank  >  Warum erhält mein Java-Code trotz Verwendung eines PreparedStatement eine MySQLSyntaxError-Ausnahme?

Warum erhält mein Java-Code trotz Verwendung eines PreparedStatement eine MySQLSyntaxError-Ausnahme?

Susan Sarandon
Susan SarandonOriginal
2024-10-31 00:35:30255Durchsuche

Why Does My Java Code Get a MySQLSyntaxError Exception Despite Using a PreparedStatement?

JDBC gibt trotz korrekter Anweisung eine MySQLSyntaxError-Ausnahme zurück

Beim Versuch, neue Zeilen in eine MySQL-Tabelle einzufügen, ist eine Java-Anwendung auf eine MySQLSyntaxError-Ausnahme gestoßen. Bei der Prüfung der SQL-Anweisung schien sie syntaktisch korrekt zu sein. Bei direkter Ausführung mit MySQL Workbench war die Anweisung jedoch erfolgreich.

Der betreffende Code verwendete ein PreparedStatement, um die INSERT-Anweisung auszuführen, wie unten dargestellt:

<code class="java">PreparedStatement sInserim = conn.prepareStatement(sqlCommandInserim);
sInserim.setString(1, utente);
sInserim.setString(2, nome);
sInserim.executeUpdate(sqlCommandInserim);</code>

Die aufgetretene Ausnahme war:

<code class="text">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 '? , ? , DEFAULT , NULL )' at line 1</code>

Bei näherer Betrachtung stellte sich heraus, dass die Platzhalter (?) nicht ordnungsgemäß durch das PreparedStatement ersetzt wurden. Dies wurde aus der folgenden Zeile deutlich:

<code class="java">sInserim.executeUpdate(sqlCommandInserim);</code>

Die MethodeexecuteUpdate() wurde mit der Roh-SQL-Zeichenfolge als Argument aufgerufen, anstatt das PreparedStatement-Objekt mit seinen festgelegten Werten zu verwenden.

Um das Problem zu beheben, wurde der Code wie folgt geändert:

<code class="java">sInserim.executeUpdate();</code>

Durch die Verwendung vonexecuteUpdate() ohne ein SQL-String-Argument werden die Werte von PreparedStatement automatisch verwendet, wodurch die MySQLSyntaxError-Ausnahme aufgelöst wird.

Hinweis:

Obwohl dies nicht direkt mit dem genannten Problem zusammenhängt, wird empfohlen, das PreparedStatement (und alle anderen Ressourcen, wie z. B. Connection, Statement und ResultSet) in einem „finally“-Block zu schließen Verhindern Sie Ressourcenlecks im Falle von Ausnahmen.

Das obige ist der detaillierte Inhalt vonWarum erhält mein Java-Code trotz Verwendung eines PreparedStatement eine MySQLSyntaxError-Ausnahme?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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