web-dev-qa-db-fra.com

Comment utiliser un arraylist en tant que paramètre d'instruction préparée

J'ai cherché et n'ai pas trouvé de réponse au défi suivant que je suis en train de vivre. Cela semble assez simple mais je n’ai pas pu le résoudre.

J'ai un ArrayList d'ID d'enregistrement de type Long -> ArrayList<Long>. J'aimerais utiliser cette liste d'identifiants d'enregistrement pour sélectionner des lignes dans une autre table. Jusqu'ici tout va bien. Maintenant sur le défi ...

a) J'utilise une instruction préparée pour sélectionner les données d'une table en utilisant le ArrayList comme entrée pour cela.

selectPS = dbConnection.prepareStatement("select columnA from tableA where id in ?");

Question sur ce qui précède - comment définir le paramètre? Ce qui précède ne semble pas correct pour un paramètre de type ArrayList.

b) Je rencontre également des problèmes lors de la définition de la valeur du paramètre pour l'instruction préparée. Il n'y a pas de méthode pour définir une valeur de type ArrayList et je ne vois aucune autre option viable.

---> selectPS.set?????(1, arraylistParameter);
     ResultSet rs = selectPS.executeQuery(); 

Toute aide ou direction que vous pouvez me donner est grandement appréciée.

Merci.

30
Thomas Grady

Vous voudrez peut-être utiliser la méthode setArray comme indiqué dans le javadoc ci-dessous:

http://docs.Oracle.com/javase/6/docs/api/Java/sql/PreparedStatement.html#setArray (int, Java.sql.Array)

Exemple de code:

PreparedStatement pstmt = 
                conn.prepareStatement("select * from employee where id in (?)");
Array array = conn.createArrayOf("VARCHAR", new Object[]{"1", "2","3"});
pstmt.setArray(1, array);
ResultSet rs = pstmt.executeQuery();
52
Yogendra Singh

Si vous avez ArrayList, convertissez-le en Array [Object]

ArrayList<String> list = new ArrayList<String>();
PreparedStatement pstmt = 
            conn.prepareStatement("select * from employee where id in (?)");
Array array = conn.createArrayOf("VARCHAR", list.toArray());
pstmt.setArray(1, array);
ResultSet rs = pstmt.executeQuery();
22
Amit Dubey