Bonjour a tous,
Voici mon problème je voudrais exécuter une requêtes a partir de Java, en passant un String (qui est sensé être un ensemble de valeurs). En utilisant le map pour passer les paramètres, j'ai constaté que le l'ensemble(déclaré comme un string) est comme une seule valeur(ce qui est normal)...
J'ai résolu le pb de deux manière:
Soit en passant directement la chaine dans le requête sans passé par les
paramètres.
Soit en passant la chaine et en mettant les valeurs dans une liste puis passé la liste dans un paramètre.

Ma question est de savoir quelle est la différence entre ces deux méthodes et laquelle est meilleure (par rapport au norme de spring)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 
 
public DAOResult listePourCG(String strListCG, String strIDCG) {
 
 Map<String, Object> namedParameters = new HashMap<String, Object>();
 
namedParameters.put("strIDCG", strIDCG);
 
namedParameters.put("strListCG", strListCG);
//exemple strIDCG=5 et strListCG=1,2,3,4,5,6,..
 //erreur car strListCG  est considéré comme une seule 
//valeur map(Key, value) en plus un string
String strSQL = "SELECT 'X' AS RESU FROM CG WHERE "
                        + ":strIDCG" + " IN (" + ": strListCG" + ")";
            return query(strSQL, namedParameters);
 
//1 ier Sol passer la chaine en dur dans la requete
 
public DAOResult listePourCG(String strListCG, String strIDCG) {
 
 Map<String, Object> namedParameters = new HashMap<String, Object>();
 
namedParameters.put("strIDCG", strIDCG);
 
String strSQL = "SELECT 'X' AS RESU FROM CG WHERE "
                        + ":strIDCG" + " IN (" +strListCG+ ")";
            return query(strSQL, namedParameters);
 
2 iem solution
 
public DAOResult listePourCG(String strListCG, String strIDCG) {
 
 Map<String, Object> namedParameters = new HashMap<String, Object>();
 
namedParameters.put("strIDCG", strIDCG);
 
List<String> strIDCGList = new ArrayList<String>();
 
        StringTokenizer st = new StringTokenizer(strListCG, ",");
        while (st.hasMoreTokens()) {
            strIDCGList.add(st.nextToken());
        }
//passage de la liste de valeur de la chaine comme une liste.
namedParameters.put("strIDCGList", strIDCGList);
String strSQL = "SELECT 'X' AS RESU FROM CG WHERE "
                        + ":strIDCG" + " IN (" +strListCG+ ")";
            return query(strSQL, namedParameters);