
FAQ JDBCConsultez toutes les FAQ
Nombre d'auteurs : 8, nombre de questions : 162, derni�re mise � jour : 3 juin 2015 Ajouter une question
Cette FAQ a �t� r�alis�e � partir des questions fr�quemment pos�es sur les forums de http://www.developpez.com et de l'exp�rience personnelle des auteurs.
Nous tenons � souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette FAQ ne pr�tend pas non plus �tre compl�te. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant r�dacteur, lisez ceci.
Les FilteredRowSet permettent de filtrer facilement les donn�es, sans passer par des commandes SQL complexes. Ce genre de filtres peuvent �tre particuli�rement utiles pour g�rer l'affichage des donn�es sans faire de multiples requ�tes vers la base. Pour filtrer les donn�es, il faut cr�er une classe impl�mentant Predicate. Dans celle-ci il suffira de d�finir la m�thode evaluate qui renvoie un boolean indiquant si une ligne donn�e doit appara�tre ou non. Par exemple :
Code java : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class MonPredicat implements Predicate{ public boolean evaluate(RowSet rowset){ try{ String nom = rowset.getString("nom"); //on ne garde ici que les personnes dont le nom commence par A if(nom.startsWith("A")){return true;} else{return false;} }catch(SQLException sqle){ return false; } } //etc. } |
Code java : | S�lectionner tout |
1 2 3 4 5 6 7 8 | FilteredRowSet rowset = new FilteredRowSetImpl(); //mise en place des propri�t�s rowset.setCommand("SELECT * FROM Annuaire"); rowset.setPredicate(new MonPredicat()); rowset.execute(); while(rowset.next()){ //seulement les lignes r�pondant favorablement au pr�dicat sont visibles } |
On peut facilement sp�cifier plusieurs colonnes et ensembles de valeurs pour le filtrage de FilteredRowSet. Voici le Predicate utilis� :
Code java : | S�lectionner tout |
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 | public class MonPredicat implements Predicate{ public Comparable[] valMin, valMax; public int[] col; public String[] nomCol; public MonPredicat(Comparable[] valeursMinimales, Comparable[] valeursMaximales, int[] colonnes, String[] nomsColonnes){ valMin = valeursMinimales; valMax = valeursMaximales; col = colonnes; nomCol = nomsColonnes; } public boolean evaluate(Object value,int column) throws SQLException{ Comparable valeurMinimum = valMin[column]; Comparable valeurMaximum = valMax[column]; return (valeurMinimum.compareTo(value)<=0) &&((valeurMaximum.compareTo(value)>=0)); } public boolean evaluate(Object value, String columnName) throws SQLException{ int column = Arrays.asList(nomCol).indexOf(columnName); Comparable valeurMinimum = valMin[column]; Comparable valeurMaximum = valMax[column]; return (valeurMinimum.compareTo(value)<=0) &&((valeurMaximum.compareTo(value)>=0)); } public boolean evaluate(RowSet rowset){ try{ boolean ok = true; int nombreColonnes = (col!=null)?col.length:nomCol.length; for(int i=0;i<nombreColonnes && ok;i++){ if(col != null){ ok &= evaluate(rowset.getObject(col[i]),col[i]); }else{ ok &= evaluate(rowset.getObject(nomCol[i]),nomCol[i]); } } return ok; }catch(SQLException sqle){ return false; } } } |
Code java : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | String url = "jdbc:mysql://localhost/test"; String user = "user"; String password = "pass"; String command = "SELECT * FROM Annuaire"; FilteredRowSet rowset = new FilteredRowSetImpl(); rowset.setUrl(url); rowset.setUsername(user); rowset.setPassword(password); rowset.setCommand(command); String[] nomsColonnes = new String[]{"id","nom","prenom"}; Comparable[] minimums = new Comparable[]{new Integer("200"),"a","b"}; Comparable[] maximums = new Comparable[]{new Integer("12360"),"f","c"}; Predicate predicat = new MonPredicat(minimums,maximums,null,nomsColonnes); rowset.setFilter(predicat); rowset.execute(); while(rowset.next()){ //dans ce cas seulement les tuples v�rifiant les conditions suivantes sont affich�s : // - id (int) compris entre 200 et 12 360 // - nom (String) : les noms compris entre a et f // - prenom (String) : les pr�noms compris entre b et c } |
Il n'existe pas de m�canisme disponible pour sp�cifier plusieurs filtres � un FilteredRowSet. Par contre, on peut facilement cr�er un gestionnaire de filtres. Celui-ci nous permettrait d'utiliser plusieurs filtres simples et de combiner leurs effets. L'avantage de cette manipulation est le fait de pouvoir facilement changer les � vues � de nos donn�es. Voici un exemple utilisant plusieurs filtres sous forme de clauses (ET logique) :
Code java : | S�lectionner tout |
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 | class GestionnairePredicats implements Predicate{ public Map<String,Predicate> filtres; public GestionnairePredicats(){ filtres = new HashMap<String, Predicate>(); } public Map<String, Predicate> getFiltres(){return filtres;} public void setFiltres(Map<String, Predicate> lesFiltres){ filtres = lesFiltres; } public void addFiltre(String nom, Predicate filtre){ filtres.put(nom,filtre); } public void removeFiltre(String nom){ filtres.remove(nom); } public boolean evaluate(RowSet rowset){ boolean ok = true; for(Predicate predicate : filtres.values()){ ok &= predicate.evaluate(rowset); } return ok; } public boolean evaluate(Object value,int column) throws SQLException{ boolean ok = true; for(Predicate predicate : filtres.values()){ ok &= predicate.evaluate(value,column); } return ok; } public boolean evaluate(Object value, String columnName) throws SQLException{ boolean ok = true; for(Predicate predicate : filtres.values()){ ok &= predicate.evaluate(value,columnName); } return ok; } } |
Code java : | S�lectionner tout |
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 | String url = "jdbc:mysql://localhost/maBase"; String user = "user"; String password = "pass"; String command = "SELECT * FROM Annuaire"; FilteredRowSet rowset = new FilteredRowSetImpl(); rowset.setUrl(url); rowset.setUsername(user); rowset.setPassword(password); rowset.setCommand(command); GestionnairePredicats gestionnaire = new GestionnairePredicats(); rowset.setFilter(gestionnaire); rowset.execute(); System.out.println("#################################################"); while(rowset.next()){ //par d�faut toutes les lignes sont visibles System.out.println(rowset.getObject("nom")+" , "+rowset.getObject("prenom")); } gestionnaire.addFiltre("filtre 1", new MonPredicat()); gestionnaire.addFiltre("filtre 2", new MonPredicat2()); rowset.beforeFirst(); System.out.println("#################################################"); while(rowset.next()){ //les deux filtres sont appliqu�s System.out.println(rowset.getObject("nom")+" , "+rowset.getObject("prenom")); } gestionnaire.removeFiltre("filtre 1"); rowset.beforeFirst(); System.out.println("#################################################"); while(rowset.next()){ //seulement le second filtre est appliqu� System.out.println(rowset.getObject("nom")+" , "+rowset.getObject("prenom")); } |
Proposer une nouvelle r�ponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plut�t sur le forum de la rubrique pour �aLes sources pr�sent�es sur cette page sont libres de droits et vous pouvez les utiliser � votre convenance. Par contre, la page de pr�sentation constitue une �uvre intellectuelle prot�g�e par les droits d'auteur. Copyright � 2025 Developpez Developpez LLC. Tous droits r�serv�s Developpez LLC. Aucune reproduction, m�me partielle, ne peut �tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'� trois ans de prison et jusqu'� 300 000 � de dommages et int�r�ts.