33 votes

À l'aide d'une variable au lieu d'un paramètre avec un indice de JDBC déclaration préparée à l'avance

Dans de nombreux langages de programmation quelque chose comme cela est possible pour les instructions préparées:

PreparedStatement statement = connection.prepareStatement(
    "SELECT id FROM Company WHERE name LIKE ${name}");
statement.setString("name", "IBM");

Mais pas avec java.sql.PreparedStatement. En Java, il faut utiliser le paramètre indices:

PreparedStatement statement = connection.prepareStatement(
    "SELECT id FROM Company WHERE name LIKE ?");
statement.setString(1, "IBM");

Est-il une solution pour travailler avec des variables de chaîne de caractères comme dans le premier exemple? Est "${.*}" pas quelque part dans le langage SQL, ou il y a des conflits? Cause alors je voudrais mettre en œuvre par moi-même (analyse de la chaîne SQL et en remplaçant chaque variable par "?" et puis de le faire la Java façon).

En ce qui concerne, Kai

26voto

laz Points 12212

JDBC Standard PreparedStatements n'ont pas cette possibilité. Spring JDBC fournit cette fonctionnalité par l'intermédiaire NamedParameterJdbcTemplate.

17voto

Zardoz Points 3902

Comme kd304 mentionnées dans le commentaire de mon affectation, c'est une très belle solution si vous ne voulez pas intégrer une autre 3ème partie de la bibliothèque (comme le Printemps) dans votre projet: Javaworld l'Article: les Paramètres Nommés pour PreparedStatement

5voto

skaffman Points 197885

À l'aide d'un raw PreparedStatement, ce n'est pas possible, comme vous le dites. Il est possible avec CallableStatement, mais qui nécessite une procédure stockée plutôt que de simplement une instruction SQL.

ORM couches comme Hibernate fournissent également nommé paramètre de substitution, et mise en veille prolongée vous permet également d'exécuter SQL natif, en contournant le OU la fonctionnalité de mappage complètement.

Donc, si vous êtes vraiment désireux d'utiliser des paramètres nommés, vous pouvez employer Hiberner comme une façon de le faire; vous ne être à l'aide d'une petite fraction de ses fonctionnalités.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X