Heim >Datenbank >MySQL-Tutorial >Warum erhalte ich bei MySQL PreparedStatements einen „Syntaxfehler in der Nähe von „?''?

Warum erhalte ich bei MySQL PreparedStatements einen „Syntaxfehler in der Nähe von „?''?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-11 12:46:15552Durchsuche

Why Am I Getting a

Ausnahme in der Nähe von „?“ Beim Ausführen von PreparedStatement in MySQL

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!

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