Apache derby est un SGBD (Système de gestion de base de données) open source implémenté en Java et disponible sous les termes de la licence Apache v2.0.

Voici quelques avantages — simplement traduits du site officiel du projet:

  • derby a un légère empreinte de l'ordre de 3,5Mib pour le moteur de base et le driver JDBC embarqué;

  • derby est basé sur Java, JDBC et les standards SQL;

  • derby fournit un driver JDBC embarqué qui vous permet d'embarquer derby dans n'importe quel solution Java;

  • derby supporte également le modèle client/serveur habituel avec le driver Derby Network Client JDBC et Derby Network Server;

  • derby est facile à installer, déployer et utiliser.

Jusque là, rien de bien neuf. Toute personne ayant développé en Java a utilisé derby. Écrire du code utilisant JDBC et derby est assez simple. Ce n'est pas l'objet de ce post. Une fois une base de données derby créée et embarquée dans un projet, je voudrais l'interroger sans écrire du code Java. Je voudrais une application dans mon terminal, comme mysql ou psql.

ij est un outil permettant les requêtes SQL fourni avec derby et présenté sur le site d'Apache. Pour l'utiliser, il suffit de récupérer les jars qui vont bien (download):

  • derby.jar pour le driver (par exemple le driver embedded). Mais ça, c'est assez habituel et;
  • derbytools.jar pour la classe ij.

Après l'installation de ij, les jars se trouvent dans le sous-répertoire de l'installation. Il suffit de les intégrer à sa variable d'environnement CLASSPATH.

$ export CLASSPATH=$CLASSPATH:/opt/db-derby/lib/derbytools.jar
    :/opt/db-derby/lib/derby.jar
    :/opt/db-derby/lib/derbyrun.jar

L'interpréteur SQL est une simple classe java. Une fois lancée, on obtient un interpréteur SQL.

$ java org.apache.derby.tools.ij
Version IJ 10.14
ij> 

Le tutoriel d'introduction fourni par Apache se résume en quelques commandes.

ij> connect 'jdbc:derby:mydb;create=true';
ij> connect 'jdbc:derby:mydb';

Ces deux commandes se connectent à la bd. La première la créée si elle n'existe pas tandis que la seconde suppose que la bd existe (dans le répertoire courant).

Une fois connecté, je peux entrer des commandes SQL habituelles. Supposons l'existence d'un fichier my.sql dont voici le contenu:

create table MY
(
    id DECIMAL(5) not null primary key,
    digits VARCHAR(32),
    digitd DECIMAL(1)
);

INSERT INTO MY VALUES(1,'zéro',0);
INSERT INTO MY VALUES(2,'un',1);
INSERT INTO MY VALUES(3,'deux',2);
INSERT INTO MY VALUES(4,'trois',3);
INSERT INTO MY VALUES(5,'quatre',4);
INSERT INTO MY VALUES(6,'cinq',5);
INSERT INTO MY VALUES(7,'six',6);
INSERT INTO MY VALUES(8,'sept',7);
INSERT INTO MY VALUES(9,'huit',8);
INSERT INTO MY VALUES(10,'neuf',9);

Supposons éqalement qu'aucune bd n'existe, une session pourrait ressembler à:

 
ij> connect 'jdbc:derby:mydb;create=true';

ij> run 'my.sql';
ij> create table MY
(
    id DECIMAL(5) not null primary key,
    digits VARCHAR(32),
    digitd DECIMAL(1)
);
0 lignes insérées/mises à jour/supprimées
ij> INSERT INTO MY VALUES(1,'zéro',0);
1 ligne insérée/mise à jour/supprimée
ij> INSERT INTO MY VALUES(2,'un',1);
1 ligne insérée/mise à jour/supprimée
ij> INSERT INTO MY VALUES(3,'deux',2);
1 ligne insérée/mise à jour/supprimée
ij> INSERT INTO MY VALUES(4,'trois',3);
1 ligne insérée/mise à jour/supprimée
ij> INSERT INTO MY VALUES(5,'quatre',4);
1 ligne insérée/mise à jour/supprimée
ij> INSERT INTO MY VALUES(6,'cinq',5);
1 ligne insérée/mise à jour/supprimée
ij> INSERT INTO MY VALUES(7,'six',6);
1 ligne insérée/mise à jour/supprimée
ij> INSERT INTO MY VALUES(8,'sept',7);
1 ligne insérée/mise à jour/supprimée
ij> INSERT INTO MY VALUES(9,'huit',8);
1 ligne insérée/mise à jour/supprimée
ij> INSERT INTO MY VALUES(10,'neuf',9);
1 ligne insérée/mise à jour/supprimée

ij> select * from my;
ID    |DIGITS                          |DIG&
--------------------------------------------
1     |zéro                            |0   
2     |un                              |1   
3     |deux                            |2   
4     |trois                           |3   
5     |quatre                          |4   
6     |cinq                            |5   
7     |six                             |6   
8     |sept                            |7   
9     |huit                            |8   
10    |neuf                            |9   

10 lignes sélectionnées

ij> exit;

That's all folks. Voilà pour la base.


Crédit photo personnelle.