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!