Maison >base de données >tutoriel mysql >Pourquoi est-ce que je reçois une « erreur de syntaxe proche de « ? » avec MySQL PreparedStatements ?

Pourquoi est-ce que je reçois une « erreur de syntaxe proche de « ? » avec MySQL PreparedStatements ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-11 12:46:15552parcourir

Why Am I Getting a

Exception proche de "?" Lors de l'exécution de PreparedStatement dans MySQL

En Java, lors de l'exécution d'une requête à l'aide de PreparedStatement, on peut rencontrer une MySQLSyntaxErrorException avec le numéro d'erreur 1064 indiquant une erreur de syntaxe proche de "?". Cela peut se produire même si la requête fonctionne dans un navigateur de requêtes MySQL avec des valeurs substituées.

En y regardant de plus près, il devient évident que MySQL est incapable d'interpréter le "?" espace réservé dans la requête SQL, jugeant sa syntaxe invalide. En effet, PreparedStatement n'a pas remplacé ces espaces réservés.

L'extrait de code que vous avez partagé écrase par erreur la requête préparée par la version originale. Pour remédier à ce problème, utilisez PreparedStatement#executeQuery() au lieu de Statement#executeQuery(String):

PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, intValue);
s.setString(2, strValue);        
rs = s.executeQuery(); // Correct

Remarque : Bien qu'il ne soit pas lié au problème actuel, votre code ne parvient pas à fermer le Connexion, instruction et ResultSet. Cette omission peut entraîner un épuisement des ressources et un crash ultérieur de l'application. Implémentez l'idiome JDBC approprié en fermant ces objets dans un bloc final :

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();
}

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