2008-12-26 6 views
3

J'ai une question comme ça - select * from TBL où ... et colname dans (2,3,4)Comment définir une liste d'entiers lors de la préparation des requêtes SQL en Java

Quand je prépare la requête (... 'colname dans (?)') en utilisant un PreparedStatement en Java, quelle méthode setter dois-je appeler pour définir ces entiers? Les entiers sont disponibles dans un tableau int et la taille varie. Si c'est important, la base de données est MySQL et la colonne en question est de type int.

+0

se demandant pourquoi ce n'est pas la question la mieux notée sur SO! ;) – ePharaoh

Répondre

3

vous pouvez utiliser une autre syntaxe

WHERE colname = ANY (?) 

et appelez PreparedStatement.setArray(). Vous devez fournir une instance de java.sql.Array comme paramètre. Un avantage de ANY au lieu de IN est que vous pouvez passer un tableau vide sans provoquer d'erreur de syntaxe SQL.

+0

Comment créer une instance de java.sql.Array? Je n'arrive pas à trouver ça. –

2

Comme un additif à l'explication de l'apprentissage:

Création d'un tableau peut être difficile.

Il existe une méthode de création dans Connection dans JDK 1.6 et versions ultérieures. http://download.java.net/jdk7/docs/api/java/sql/Connection.html#createArrayOf(java.lang.String,%20java.lang.Object[])

Étant donné que JDK1.6 est la dernière version stable, il se peut que vos pilotes JDBC ne la prennent pas en charge.

Vous pouvez essayer de créer votre propre implémentation de tableau, mais cela peut ne pas fonctionner avec toutes les implémentations de connecteur JDBC.

Questions connexes