Maison >Java >javaDidacticiel >Pourquoi mon PreparedStatement en Java génère-t-il une erreur de syntaxe MySQL proche de « ? » ?

Pourquoi mon PreparedStatement en Java génère-t-il une erreur de syntaxe MySQL proche de « ? » ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-01 02:31:09184parcourir

Why Does My PreparedStatement in Java Throw a MySQL Syntax Error Near

Erreur de syntaxe MySQL avec la question PreparedStatement

Lors de la tentative d'exécution d'une requête avec PreparedStatement en Java, une erreur se produit indiquant une erreur de syntaxe proche de "?". L'exception est :

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 '? or MemberName = ?' at line 1

Extrait de code

String query = "select MemberID, MemberName from members where MemberID = ? or MemberName = ?";
Connection conn = DriverManager.getConnection(DATABASE_URL, USERNAME, PASSWORD);
PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, 2);
s.setString(2, "zen");
ResultSet rs = s.executeQuery(query); // Fail!

Résolution du problème

L'erreur se produit car MySQL ne reconnaît pas le "?" dans la requête SQL comme espace réservé. Cela est dû à l'appel suivant :

rs = s.executeQuery(query); // Fail!

Au lieu d'utiliser PreparedStatement#executeQuery sans argument, la chaîne de requête d'origine est transmise, ce qui remplace l'instruction préparée.

Pour résoudre le problème , la méthodeexecuteQuery de PreparedStatement doit être appelée sans arguments :

rs = s.executeQuery(); // OK!

Resource Fuite

Bien que sans rapport avec le problème d'origine, le code perd des ressources. Pour éviter cela, les ressources doivent être fermées en utilisant l'idiome JDBC :

try {
    // Acquire resources here
} catch (Exception e) {
    // Handle exception
} finally {
    // Close resources here
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn