Bonjour,
Je viens vous demander de l'aide car j'ai un formulaire avec différents champs de recherche.
Seulement voilà certains champs doivent être rempli et en fonction de ces champs la recherche SQL doit prendre en compte ces champs.
Connaissez vous un moyen autre que le miens ou sinon pouvez vous m'aider afin que ma technique fonctionne. Car mon objectif est de limité les études de cas du genre : Si tels ou tels champs est différent de null alors on applique telles requête SQL. Etc... pour tous les champs et combinaison possible...
Voici le contenu de ma méthode dans mon DAOimp :
Et voici mon implémentation de ma méthode initialisationRequetePreparee :
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
48
49
50
51
52
53
54
55
56
57
58
59 private static String SQL_SELECT_MATERIEL = "SELECT * FROM MATERIEL WHERE 1=1 "; public List<Materiels> trouverListMateriels(String numMateriel, String numArticle)throws DAOException { /* Implémentation de la méthode définie dans l'interface ArticleDao */ Connection connexion = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; Materiels materiel = null; SQL_SELECT_MATERIEL = "SELECT * FROM MATERIEL WHERE 1=1 "; System.out.println("contenu numMateriel : "+numMateriel); System.out.println("contenu numArticle : "+numArticle); try { /* Récupération d'une connexion depuis la Factory */ connexion = daoFactory2.getConnection(); //SI MON CHAMP NumMateriel est pas null alors j'ajoute AND ... a ma requete prepare if(numMateriel != null){ System.out.println("JE PASSEEEEE"); SQL_SELECT_MATERIEL = SQL_SELECT_MATERIEL.concat("AND NUM_MATERIEL LIKE ? "); System.out.println("SQLcat : "+SQL_SELECT_MATERIEL); listChaine.add("numMateriel"); } if(numArticle != null){ SQL_SELECT_MATERIEL = SQL_SELECT_MATERIEL.concat("AND NUM_ARTICLE LIKE ? "); listChaine.add("numArticle"); System.out.println("SQLcat2 : "+SQL_SELECT_MATERIEL); } preparedStatement = initialisationRequetePreparee( connexion, SQL_SELECT_MATERIEL, false, listChaine ); resultSet = preparedStatement.executeQuery(); System.out.println("execution de la requete "+SQL_SELECT_MATERIEL); /* Parcours de la ligne de données de l'éventuel ResulSet retourné */ materiels.clear(); while ( resultSet.next() ) { System.out.println("je PASSE !"); //System.out.println("resultat : "+resultSet.getString(0)); materiel = map( resultSet ); materiels.add(materiel); } } catch ( SQLException e ) { System.out.println("erreur dans la requete !"); throw new DAOException( e ); } finally { System.out.println("fermeture de la connection !"); fermeturesSilencieuses( resultSet, preparedStatement, connexion ); } return materiels; }
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 /* * Initialise la requête préparée basée sur la connexion passée en argument, * avec la requête SQL et les objets donnés. CELLE-CI Fonctionne mais en spécifiant chaque champs du type Object à la main */ public static PreparedStatement initialisationRequetePreparee( Connection connexion, String sql, boolean returnGeneratedKeys, Object... objets ) throws SQLException { PreparedStatement preparedStatement = connexion.prepareStatement( sql, returnGeneratedKeys ? Statement.RETURN_GENERATED_KEYS : Statement.NO_GENERATED_KEYS ); System.out.println("contenu SQL : "+sql); for ( int i = 0; i < objets.length; i++ ) { preparedStatement.setObject( i + 1, objets[i] ); System.out.println("contenu : "+objets[i]); } return preparedStatement; } //test CELLE-CI NE FONCTIONNE PAS ET C DE CELLE Là DONT IL EST QUESTION POUR M'AIDER SVP public static PreparedStatement initialisationRequetePreparee( Connection connexion, String sql, boolean returnGeneratedKeys, ArrayList<String> objets ) throws SQLException { PreparedStatement preparedStatement = connexion.prepareStatement( sql, returnGeneratedKeys ? Statement.RETURN_GENERATED_KEYS : Statement.NO_GENERATED_KEYS ); System.out.println("contenu SQL : "+sql); System.out.println("contenu prepared : "+preparedStatement); for (int i = 0; i < objets.size(); i++ ) { preparedStatement.setObject(i + 1, objets.get(i)); System.out.println("contenu : "+objets.get(i)); } return preparedStatement; }
Partager