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
Libérer: 2024-12-11 12:46:15
original
551 Les gens l'ont consulté

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
Copier après la connexion

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();
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal