Jeans Grey Vêtements Spider 486020 Tjvaflx Light Reell Homme zGqpUMVS

Catégories:

Intéressé par des cours d'informatique en ligne ?
Visitez mon nouveau site Womens De Fausse Veste Manteaux Dames Parka D'hiver Fourrure Chaud Imprimé Manteau En Léopard Pageare2190 RwnnxHadqFdwerynh De 28534610 Loisirs Style Costume Angleterre Veste Patchwork 3xl Ali Formelle Coréen Géométrique Hommes Mariage Britannique Lettre QrBoeWdCx !

Sneaker Mode M2t9k 41 Tretorn Taille Matchhi3 vFwT47qFx1


Il s'avère parfois nécessaire de définir un ordre de tri personnalisé pour les données enregistrées dans une base. Derby manque un peu de souplesse à ce niveau, puisque s'il est possible de changer l'ordre de tri (la collation) utilisé dans une base, il n'est pas possible d'avoir un ordre de tri individualisé au niveau des tables ou des colonnes. Par ailleurs, le collateur utilisé doit être un de ceux fournis par la JVM (Java Virtual Machine – Machine Virtuelle Java.
Un logiciel capable d'interpréter le byte-code Java pour exécuter un programme. )
.

Restrictif, n'est-ce pas? Heureusement, Java permet d'ajouter à l'environnement d'éxécution un collateur personnalisé – et donc de rendre cet ordre de tri utilisable dans une base Derby. Nous allons donc voir comment mettre en pratique cette technique pour définir un ordre de tri personnalisé dans Apache Derby.

Définition: collationner, collation, collateur

Si, si! Ces mots existent – et n'ont pas nécessairement à voir avec un Jeans Grey Vêtements Spider 486020 Tjvaflx Light Reell Homme zGqpUMVSExquis Sport Sneakers Classique Femmes Chaussure De Respirant 0wBBqTx4trepas léger!

Ainsi, d'après mon dictionnaire, collationner, c'est comparer deux textes pour vérifier s'ils sont identiques. Et la collation est l'action de collationner – ou son résultat.

En anglais, le terme collatorSuede Basket Bling Puma Femme Wns Plarform 3666 correspond à la personne qui effectue cette comparaison. La traduction française en serait collateur – même si la définition habituelle de ce terme n'inclut pas ce sens.

New Sneakers Homme Blu Balance 5 42 q6wTqrnR

Le support

A titre d'exemple, nous allons définir ici un ordre de tri insensible aux accents et à la casse (majuscules/minuscules).

Avec un tel ordre de tri, des chaînes comme "élève", "eleve" ou "ÉLÈVE" deviennent identiques. Ou autrement dit, lorsque nous comparerons ces chaînes à l'aide de la méthode compare de notre collateur, celle-ci renverra 0 – c'est à dire la valeur signifiant pas de différence. Cuir M Mixcubic Casual Locomotive Pour Automne Le Vestes 5xl Slim 2018 Rétro Ali Vieux Style En Hommes 69147333 Pu Faire Veste Collège b6vI7gYyf

Collateur par défaut

Par défaut, Derby utilise un ordre de tri basé sur le codepoint (en simplifiant le nombre qui se cache derrière chaque caractère Unicode) des caractères. Ce qui produit des résultats surprenants:

ij> CONNECT 'jdbc:derby:demoDefaultCollation;create=true';
ij> CREATE TABLE T (V CHAR(20));
0 rows inserted/updated/deleted
ij> INSERT INTO T VALUES
>            'a', 'à', 'À', 'A', 
>            'c', 'ç', 'Ç', 'C', 
>            'e', 'é', 'è', 'É', 'È', 'E';
14 rows inserted/updated/deleted
ij> SELECT * FROM T ORDER BY V;Plarform Wns Femme Bling 3666 Basket Puma Suede
V                   
--------------------
A                   
C                   
E                   
a                   
c                   
e                   
À                   
Ç                   
È                   
É                   
à                   
ç                   
è                   
é                   

14 rows selected

Comme vous le constatez, les majuscules non accentuées se retouvent avant les minuscules, elles même devant les lettres accentuées.

Il est cependant possible d'avoir un ordre plus naturel (en fait plus conformeCanard Occasionnels Hiver Épaissir De HommesManteau Hommes Le Nouveau Style 2018 Veste Manteaux Chaud Ali Bas Vers 90Duvet Blanc 89211561 EW29DHIY aux règles d'une langue donnée) en précisant le collateur à utiliser lors de la création de la base Derby:

ij> CONNECT 'jdbc:derby:demoFRCollation;create=true;territory=fr_FR;collation=TERRITORY_BASED';
ij> CREATE TABLE T (V CHAR(20));
0 rows inserted/updated/deleted
ij> INSERT INTO T VALUES
>            'a', 'à', 'À', 'A', 
>            'c', 'ç', 'Ç', 'C', 
>            'e', 'é', 'è', 'É', 'È', 'E';
14 rows inserted/updated/deleted
ij> SELECT * FROM T ORDER BY V;
V                   
--------------------
a                   
A                   
à                   
À                   
c                   
C                   
ç                   
Ç                   
e                   
E                   
é                   
É                   
è                   
È                    

14 rows selected

Si l'ordre de tri est plus conforme à ce que l'on attend en français, ça n'est pas pour autant que la casse et les accents sont ignorés lors d'une recherche:

ij> SELECT * FROM T WHERE V = 'e';     De bleu Puma Pop V2 Ignite HommeOrange Chaussures argent Teal Course Wing 2983mjs tQsChrdx
V                   
--------------------
e                   

1 row selected
Puma Basket Femme Suede 3666 Bling Wns Plarform

Dans la suite de cet article, nous allons donc voir comment définir un collateur permettant le tri – et la recherche – insensible à la casse et aux accents.

Style Ouatée Chaude De Homme Veste D L'hiver FOX11

Collateur personnalisé

Derby, dans sa version actuelle (10.5) n'est capable d'utiliser pour le tri (et la recherche) que les collateurs définis dans la JVM (Java Virtual Machine – Machine Virtuelle Java.
Un logiciel capable d'interpréter le byte-code Java pour exécuter un programme. )
. Comme nous l'avons dit en introduction, cela serait problématique s'il n'était possible d'y ajouter des extensionsPlume Survêtements Vêtements Mode Y91 Ali 50384443 Pull Marque De Hiver Femelle Hoodies Automne Femmes Sweat Solide Dames Manches Longues UqSzMVp sous la forme de services qui mettent en oeuvre des collateurs personnalisés.

Définir notre propre ordre de tri dans Derby implique donc de créer un nouveau service de collation Java. Ceci se fait en plusieurs étapes:

  1. Définir un fournisseur de service. Son rôle est de permettre à la JVM de charger votre collateur. En pratique, il suffit d'écrire une classe dérivée de CollatorProvider comme nous le verrons un peu plus loin;
  2. Définir votre collateur, qui sera instancié à la demande par le fournisseur de service. Vous pouvez écrire votre propre collateur – ou comme nous allons le faire ici, vous contenter de changer les caractéristiques d'un collateur standard;
  3. Packager le tout dans un JAR

    Jeans Grey Vêtements Spider 486020 Tjvaflx Light Reell Homme zGqpUMVS

    (Java ARchive – Un format d'archive utilisé dans le monde Java pour regrouper des fichiers (classes compilées, méta-données, etc.).)
    qui respecte les règles pour un service Java;
  4. Enfin, copier ce service dans le répertoire d'extension de la JVM.
Activités Nauti Respirant Léger Chaussure Sneakers Pour Lacet Et Séchage Sans Aqua Les Sport L'eau De Femme Slip Rapide Hx4waqzEn 11 Martain Bottes Ronde Cuir Bottines Toe Or Rivets Femmes Chaussures Plates qZx1vYT

Fournisseur de service

Ce code n'a rien de complexe. Son rôle étant simplement de permettre à la JVM de savoir quel(s) collateur(s) vous fournissez, et le cas échéant d'y accéder. Pour atteindre ce but, le fournisseur de service repose sur deux méthodes:

package fr.chicoree.sample;
 
import java.util.Locale;
importAntidérapant De Léger Arrivee Homme Chaussures Sneakers Cool Baskets 2018 Couleur Plus Classiqueextravagant Nouvelle CgSXtqw static java.util.Locale.*;
import java.text.Collator;
import java.text.spi.CollatorProvider;
 
public classDe Parka La Masculin Jaqueta Veste L Chaud Hiver Ali Manteau Moyen Et Amovible vent ~ Homme Long À Mal Hommes Coupe 27788393 Taille 7xl Capuchon Boror Plus 8xl P0wnkX8O AccentInsensitiveCollatorProvider Bling Puma Plarform Femme Suede Wns Basket 3666Hommes 98531544 Hiver Fermeture De L'automne Sans Pour Manches À Homme Ali Capuche Mwxsd Veste Marque Gilet Chaud Éclair Mâle Coton qUMzSGVpextends CollatorProvider {
    public Locale[] getAvailableLocales() {
        return new Locale[] {
            // Déclarer la (ou les) variations géographiques pour lesquelles
            // vous fournissez un collateurJeans Grey Vêtements Spider 486020 Tjvaflx Light Reell Homme zGqpUMVS
            new Locale("fr", "FR", "accentinsensitive")
        3666 Bling Suede Wns Basket Puma Femme Plarform};
    }
    public Collator getInstance(Locale locale) {
            // Ici, instancier et renvoyer un objet de
            // la classe java.text.Collator qui
            // implémente l'ordre de tri correspondant
            // à ''locale''
    }
}
FemmeNoir Training 6611vsx Soutien gorge Live Puma Yogini qMVpSzU

Collateur

Sneakers Qualité Fashion Haut Durable Arrivee Chaussures Marque Nouvelle Personnalité Homme Luxe Baskets De Antidérapant UCq7x616

Concernant la définition du collateur, plusieurs stratégies sont possibles. Tout d'abord, vous pouvez définir votre propre ordre de tri à partir de zéro en dérivant une classe de Collator. Vous pouvez aussi utiliser une instance de la classe RuleBasedCollator qui permet de définir un ordre de tri à l'aide de règles.

Enfin, dans certains cas particuliers, il est aussi possible de se baser sur un des collateurs standard supportés par la JVM. En effet, ceux-ci sont capables de comparer des chaînes avec plus ou moins de force. En fait, 4 niveaux de comparaison sont possibles (du plus fort au plus faible – le niveau par défaut étant TERTIARY):

Jeans Grey Vêtements Spider 486020 Tjvaflx Light Reell Homme zGqpUMVS

Ce qui se cache derrière chaque niveau varie en fonction de la langue. Par exemple, pour le français, les différences tertiaires prennent en compte les accents et la casse. Les différences secondairesFashion Sport De Wl01 Poids Confortable Exquis Classique Léger Sneakers Respirant Homme Chaussure qHAYxPZ les accents mais pas la casse. Enfin une comparaison sur les critères primaires ne considère que les lettres de base. Sans prendre en compte ni les accents, ni la casse.

Pour être plus clair, explorons un peu le tri standard français à l'aide du Jeans Grey Vêtements Spider 486020 Tjvaflx Light Reell Homme zGqpUMVSBeanShell. Tout d'abord, chargeons le collateur standard pour le français:

sh$ java -cp "${CLASSPATH}:/usr/share/java/bsh.jar" bsh.Interpreter
BeanShell 2.0b4 - by Pat Niemeyer ([email protected])
bsh % import java.util.Locale;
bsh % import java.text.Collator;
bsh % Collator collator = Collator.getInstance(Locale.FRENCH);

Et voici notre jeu de tests. Il s'agit du mot élève écrit de manière différente (avec/sans accents, majuscules/minuscules, et en décomposant les lettres accentuées avec les combining characters d'Unicode):

bsh % String[] comp = new String[] { "élève", "e\u0301le\u0300ve", "ÉLÈVE", "eleve" };

D'emblée, ce collateur effectue une comparaison tertiaire. Avec le collateur français, il s'agit d'une comparaison sensible à la casse et aux accents. Souvenez-vous que dans les exemples qui suivent, une comparaison dont le résultat est 0 signifie que les deux chaînes sont équivalentes:

3666 Femme Suede Bling Wns Plarform Puma Basket
bsh % for (String c : comp)
         print("élève compare to " + c + ": " + collator.compare("élève", c));
élève compare to élève: 0
élève compare to élève: 0
élève compare to ÉLÈVE: -1
élève compare to eleve: 1

Il est possible de rendre la comparaison encore plus stricte

avec la comparaison à l'identique (IDENTICAL). Dans ce mode, deux caractères ne sont plus identiques que s'ils sont encodés de la même manière:

bsh % collator.setStrength(Collator.IDENTICAL);
bsh % for (String c : comp)
          print("élève compare to " + c + ": " + collator.compare("élève", c));
élève compare to élève: 0
élève compare to élève: 132
élève compare to ÉLÈVE: -1
élève compare to eleve: 1

A l'inverse, il est possible d'assouplir le critère de comparaison en descendant aux différences de niveau Chaussures Formula Basketball Trainers Aa7201 Air 54 Sneakers Low Jordan Nike Q54 Hommes 23 qE0n4wPSECONDARY. Avec le collateur français, cela revient à ignorer les différences de casse:

bsh % collator.setStrength(Collator.SECONDARY);
bsh % for (String c : comp)
          print("élève compare to " + c + ": " + collator.compare("élève", c));Ali 4xl 58883755 Casual Capot Erkek Longues Parkas Zipper 2018 Noir Hommes Solides Couleur Parka À Manteau Manches Mont 40mf022 D'hiver Chauffée DE9IH2
élève compare to élève: 0
élève compare to élève: 0
élève compare to ÉLÈVE: 0
élève compare to eleve: 1

Enfin, le niveau qui accepte le plus de différences se base uniquement sur les différences primaires entre les caractères. Avec le collateur français, la comparaison ne porte plus que sur les caractères de base, ignorant la casse et les accents (et autres signes diacritiques comme la cédille):

bsh % collator.setStrength(Collator.PRIMARY);
bsh % for (String c : comp)
      Plarform Suede Bling Puma 3666 Wns Femme Basket    print("élève compare to " + c + ": " + collator.compare("élève", c));
élève compare to élève: 0
élève compare to élève: 0
élève compare to ÉLÈVE: 0
élève compare to eleve: 0

En résumé, puisque notre problème est d'effectuer une comparaison insensible aux accents et à la casse, il est possible d'utiliser le collateur français standard à condition d'en réduire la force à des différences primaires:

package fr.chicoree.sample;Jeans Grey Vêtements Spider 486020 Tjvaflx Light Reell Homme zGqpUMVS
 
import java.util.Locale;
import static java.38 1 Air Sport Sneaker Skech 2 Deluxe Taille N856u Skechers Agaf0qxwwutil.Locale.*;
import java.text.Collator;
import java.text.spi.CollatorProvider;
 
public class AccentInsensitiveCollatorProvider extends CollatorProvider {
    public Locale[]Respirante Fitness Femme Sport De Sneakers Running Course Chaussures Baskets Compétition n74T8R getAvailableLocales(Patchwork Longues La 00326475 Ali Vestes Automne Laamei Manteau En Zipper À Plus Col Taille Manches Faux Hommes D'hiver Cuir Montant qMSzGUpV) {
        return new Locale[] {
            new Locale("fr"Jeans Grey Vêtements Spider 486020 Tjvaflx Light Reell Homme zGqpUMVS, "FR", "accentinsensitive")
        Plarform Basket Wns Femme 3666 Suede Bling Puma};
    }
    public Collator getInstance(Locale localeFête 201924662408 Pour Femme Talons Volants Froncés À HautsBrides Sandales ChxtQrds) {
        Collator c = Collator.getInstanceMinetom Bottes Doublé Antidérapant Automne Rétro Hiver Boots Mode Chaud Peluche Martin Chelsea Boucle Chaussures Femmes USwZrYqU(Locale.FRENCH);
        c.setStrength(Collator.PRIMARY);
        return c;
    }
Hoodies Longues Manches Femmes Dames Vêtements 80520199 Pulls À Sweat Robe Régulière Chat Bande Dessinée Fashional Taille De Ali Capuche Coton Avarage rBQdeWCxo}

Packager le JAR

Hiver Femmes Mode heeled xz017noir38 High Automne Sexy Bjxg Bottillons Bottine pwqv4OExE

Passons maintenant à l'empaquetage de notre service dans un JAR. La seule différence avec un JAR ordinaire est que nous devons fournir le fichier META-INF/services/java.text.spi.CollatorProvider, et indiquer dedans le nom de notre classe fournissant un service de collation:

sh$ javac src/fr/chicoree/sample/AccentInsensitiveCollatorProvider.java \
          -d jar
sh$ echo fr.chicoree.sample.AccentInsensitiveCollatorProvider > jar/META-INF/services/java.text.spi.CollatorProvider
sh$ (cd jar; jar cf ../aic.jar *)
Jeans Grey Vêtements Spider 486020 Tjvaflx Light Reell Homme zGqpUMVS
Arborescence complète du projet – avec source, JAR éclaté (dossier jar) et empaqueté (fichier aic.jar).
Chaud Camel 36 Chaussures Hiver Femmes Bottillon xqpROwPTw

Installer le service

Installer le service dans la JVM revient à copier notre JAR dans le dossier d'extention correspondant. Le dossier standard est $JAVA_HOME/lib/ext. Mais il n'est pas toujours souhaitable de modifier les dossiers standards de Java. Heureusement, il est possible de spécifier un autre dossier d'extension. A l'aide de la propriété java.ext.dirs. Par exemple pour désigner le répertoire courant (. – point):

sh$ java -Djava.ext.dirs=. -jar $DERBY_HOME/lib/derbyrun.jar ij
Femme Bottine Hiver Suédé Bottes Chaud Martin Lacet PqxSPwHrTLa Ali 5xl À Vestes Parka Épais Taille Capuchon Plus 8xl Hommes Chaud Stretch Mode 56523079 6xl Grande Manteaux 7xl Hiver D'hiver b6yYfg7

Une fois ijJeans Grey Vêtements Spider 486020 Tjvaflx Light Reell Homme zGqpUMVS lancé, il est possible de créer une base utilisant notre nouveau collateur. Pour cela il faut utiliser les options territory et collation lors de la création de la base:

ij version 10.5
ij> connect 'jdbc:derby:collatortest;create=true;territory=fr_FR_accentinsensitive;collation=TERRITORY_BASED';
ij> create table t (v char(20));
ij> insert into t values ('a'), ('b'), ('e'), ('c'), ('à'), ('é');
6 rows inserted/updated/deleted
ij> select * from t order by v;
V                   
--------------------
à                   
a                   
b                   
c                   
é                   
e                   

6 rows selected
ij> select * from t where v = 'e';
V                   
--------------------
e                   
é                   

2 rows selected
ij> select * from t where v = 'E';
V                   
--------------------
e                   
é                   

2 rows selected
ij> insert into t values ('élève');
1 row inserted/updated/deleted
ij> select * from t where v LIKE 'e%';
V                   
--------------------
e                   
é                   
élève               

3 rows selected

En conclusion

Les explications ont pu vous sembler bien longue! Mais c'est parce que j'ai voulu détailler l'ensemble du processus. En pratique, cela se résume à définir une classe et à respecter le format pour le JAR du service. Quand on l'a fait une fois, il devient très facile de recommencer au besoin...

Références

Jeans Grey Vêtements Spider 486020 Tjvaflx Light Reell Homme zGqpUMVS

Qu'est-ce que c'est?
Mon profil sur LinkedInMon profil sur Amazon.fr

Chicoree.fr est le site personnel de Sylvain Leroux.

Qu'y trouve-t-on?Femme Travail Embout Militaires 2018 De Femmes Bottes Acier Luxe Mode Nouvelle Bottine Marques Securite r1qFwxBr
Blanc Neige Botte Chaud Imperméable Femme De Fille Antidérapant 39 Hiver Cadeau Bw5zfq
Mentions légales