Maison >base de données >tutoriel mysql >Pourquoi mon code Java génère-t-il une exception SQL « Index des paramètres hors plage » ?

Pourquoi mon code Java génère-t-il une exception SQL « Index des paramètres hors plage » ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-27 00:48:17666parcourir

Why Does My Java Code Throw a

Index des paramètres hors plage dans l'exception SQL : causes et solution

Rencontre de l'exception "java.sql.SQLException : index des paramètres hors de range (1 > nombre de paramètres, soit 0)" lors de l'insertion dans la base de données peut être frustrant. Cette erreur se produit lorsque vous essayez de définir une valeur de paramètre dans une instruction préparée alors que la requête SQL ne dispose pas des espaces réservés correspondants (?) pour ces paramètres.

Cause de l'erreur :

Cette erreur se produit lorsque vous tentez d'utiliser la méthode setXxx() sur PreparedStatement, mais que la chaîne de requête SQL ne dispose pas des espaces réservés nécessaires pour le paramètre spécifié. index.

Exemple de code incorrect :

String sql = "INSERT INTO tablename (col1, col2, col3) VALUES (val1, val2, val3)";

preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, val1); // This will fail.
preparedStatement.setString(2, val2);
preparedStatement.setString(3, val3);

Solution :

Pour résoudre ce problème, vous devez modifiez la chaîne de requête SQL pour inclure des espaces réservés (?) Pour tous les paramètres que vous souhaitez set.

Exemple de code corrigé :

String sql = "INSERT INTO tablename (col1, col2, col3) VALUES (?, ?, ?)";

preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, val1);
preparedStatement.setString(2, val2);
preparedStatement.setString(3, val3);

Remarque :

  • Les indices des paramètres commencent à 1 .
  • Vous devez éviter d'utiliser des guillemets simples ou doubles autour des espaces réservés. Cela amènera l'analyseur SQL à les interpréter comme des valeurs de chaîne, conduisant à la même exception.

Informations supplémentaires :

  • [Tutoriel JDBC - Préparé Déclarations](https://docs.oracle.com/javase/7/docs/technotes/guides/jdbc/index.html#prepared)

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