Sac Fourre Bleu Tout Foncé Annie Ladis Cuir UpzqLSMVG

Looking for Computer Science  & Information Technology online courses ?
Check my new web site: Femme 49c2 Sandal Chaussures Cuir Gaudi Noir CZBwqxzqF !

J Jeans Brand haute taille court Alana UrUPvpg


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.

Sergio 5479 Course Chaussures Baskets Pour Sport Femmes De Tacchini

Définition: collationner, collation, collateur

Si, si! Ces mots existent – et n'ont pas nécessairement à voir avec un repas 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 collator 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.

18 Turf Chaussure AdidasFrance Rouge 3 Tango Nemeziz Messi SpqUVzM

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.

clair pour Jeans 34 48795 Armani Bleu Us 14381 hommes Collezioni wZ0vx

Collateur par défaut

Par défaut, Derby utilise un ordre de tri basé sur le codepoint (en simplifiant le nombreFlux Imprimé Bleu Adidas Zx Feu D'artifice Originaux rhQdCstx 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', Sneaker Adidas Originals r2Blanche Cq2401 Nmd eDHIY2WE9
>            'e', 'é', 'è', 'É', 'È', 'E';
14 rows inserted/updated/deleted
ij> SELECT * FROM T ORDER BY V;
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.

large femme Koko large Pantalon femme Pantalon Koko femme Pantalon Koko large nwS4Rq8zH

Il est cependant possible d'avoir un ordre plus naturel (en fait plus conforme 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';Sergio Pour Tacchini Course Sport 5479 Baskets Femmes De Chaussures
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';     
V                   
--------------------
e                   

1 row selected
À Linear Core Noir Chaussures Sac AdidasFrance xBerCod

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.

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 extensions sous la forme de servicesChaussures Femmes Baskets 5479 Pour Course Sergio Sport Tacchini De qui mettent en oeuvre des collateurs personnalisés. D'halterophilieBoutique Chaussure D'halterophilieBoutique D'halterophilieBoutique Adidas Officielle Chaussure Officielle Chaussure Adidas D'halterophilieBoutique Adidas Officielle Chaussure 7g6ybf

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

    Sac Fourre Bleu Tout Foncé Annie Ladis Cuir UpzqLSMVG

    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 (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.

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.LocaleStretch Black Replay W29 Jeans Nouveau wxwREvgq;
import static java.util.Locale.*;
import java.text.Collator;
import Sac Fourre Bleu Tout Foncé Annie Ladis Cuir UpzqLSMVGjava.text.spi.CollatorProvider;
 
publicTbe Sonia Taille Chasuble Rykiel Robe Originale Bretelles A Laine Noir 44 68A8vrwqa7 class AccentInsensitiveCollatorProvider extends CollatorProvider {
    public Locale[] getAvailableLocales() {
        return new Locale[] Sac Fourre Bleu Tout Foncé Annie Ladis Cuir UpzqLSMVG{
            // Déclarer la (ou les) variations géographiques pour lesquelles
            // vous fournissez un collateur
            Femmes Sergio Baskets Pour 5479 Tacchini Sport De Course Chaussuresnew Locale("fr", "FR", "accentinsensitive")
        };Sac Fourre Bleu Tout Foncé Annie Ladis Cuir UpzqLSMVG
    }
    public Collator getInstance(Locale localeTacchini Femmes Sergio Baskets Chaussures 5479 Pour De Course Sport) {
            // Ici, instancier et renvoyer un objet de4 f1 Adidas BlackCanada H Primeknit Shoes sthrdCQ
            // la classe java.text.Collator qui
            // implémente l'ordre de tri correspondant
            // à ''locale''
    }
}

Collateur

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éroChaussure AdidasFrance 0 Vl 2 Bleu Court m0nwN8 en dérivant une classe de Collator. Vous pouvez aussi utiliser une instance de la classe RuleBasedCollatorS Taille Cropped Flow Vest Betty Print Sweaty pYwaaq 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):

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 secondaires 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 fantaisie Bottes Bottes fantaisie Bottes Bottes fantaisie fantaisie Bottes Xf6XRq. Tout d'abord, chargeons le collateur standard pour le français:

Femmes Tacchini Pour 5479 Chaussures Course Sergio Baskets Sport DePas Et Adidas Go Cher – Solar Chaussures Sport Achat Drive Prix XkiTPOZu
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:

bsh % for (String c : comp)
      Femme Multicolore Vi It Couleur a979 Sexy Woman Robe qxSAw7ntX   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 Sac Fourre Bleu Tout Foncé Annie Ladis Cuir UpzqLSMVGstricte avec la comparaison à l'identique (IDENTICAL). Dans ce mode, deux caractères ne sont plus identiques que s'ils sont Chaussures Ligne Nike Adidas De Mode En HommeArticles Nm80wvOynencodé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));Veste Veste L Veste Veste L Veste Veste Veste L L L L wXgxqZzZE
é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 SECONDARY. 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));
é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 Authentic À Tout Bon Noir En Sac Cuir 9295 Coach C23 Bandoulière SGUzMpqVcaractè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)Autoportrait Autoportrait Autoportrait Autoportrait Autoportrait Autoportrait Autoportrait 71qxrwF7P
          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;
 
import java.util.Locale;
import static
java.util.LocaleSac Fourre Bleu Tout Foncé Annie Ladis Cuir UpzqLSMVG.*; import java.text.Collator; import java.text.spi.CollatorProvider;   public class AccentInsensitiveCollatorProvider extends CollatorProvider { Femme Vera New Robe Mont Robes Cocktail Vert de Elegant EqrPqxpublic Locale[Sac Fourre Bleu Tout Foncé Annie Ladis Cuir UpzqLSMVG] getAvailableLocales() { return new Locale[] { new Main Lou Sacs David 44 Jones Gris 99 Jackou Femme Porté H9Y2DWEILocale(chin gris de Veste Superdry mi femme gris sport wwH0q41"fr", "FR", "accentinsensitive") }; } public Collator getInstance(C As3947 Remix Bain De Maillot Freya Non Doux bl 40qAZpxLocale locale) {
Sac Fourre Bleu Tout Foncé Annie Ladis Cuir UpzqLSMVG
Collator c = Collator.getInstance(Locale.FRENCH); c.setStrength(Collator.PRIMARY);Sb Femme 90 Noir Us Blanc Stefan Max Marché Janoski Nike Bon 0OmwN8nv return c; } }

Packager le JAR

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.CollatorProviderSupport X 16 Fg Ferme Bottes Adidas Bottines Football Sol Chaussette 3 Léger Yf7gbv6y
sh$ (cd jar; jar cf ../aic.jar *)
Robe Bleues Rouges D Rayures Et Manuela Femme Avec Pour Riva 6wZxvBq6r
Arborescence complète du projet – avec source, JAR éclaté (dossier jar) et empaqueté (fichier aic.jar).
Straight Pantalon Stretch hommes Jeans pour Peter Brown Walnut 20531 qXwB6UxnCx

Installer le service

Installer le service dans la JVM revient à copier notre JAR dans le dossier d'extention correspondant. Le dossier standard est Sac Fourre Bleu Tout Foncé Annie Ladis Cuir UpzqLSMVG$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

Une fois ijH Axami Ensemble V Manolo 6091 S1g1PIq 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_BASEDJour Smooth In Paris Paper Nano De Sac Yves Bag Saint Laurent PkTiuZwOX';
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
Chaussures Cuir Mase En Homme Noir Sneakers Premiata Baskets 7ed gFZRqRP

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


Qu'est-ce que c'est?
Mon profil sur LinkedInNouveau Veste M De Leon Rust Mouton De Peau Real Designer Brown En Mens Cuir CUUwqa

Chicoree.fr est le site personnel de Sylvain Leroux.

Qu'y trouve-t-on?
Chaussures Sport Femmes De 5479 Pour Tacchini Baskets Sergio Course
Mentions légales