Powered By Blogger

domingo, 3 de diciembre de 2017

Instalación de Apache Derby 10.14.1.0 en Ubuntu Server 16.04 Parte II

En esta segunda entrega sobre Apache Derby, veremos cómo interactuar directamente con esta base.

Este post ha sido siguiendo la guía inicial de Apache Derby, de la cuál por acá dejo el link respectivo:

Empezando con Apache Derby

En la guía destaco que hay varias maneras de interactuar con Derby, según sea la necesidad:
  • Network Server.
  • Derby embebida en la aplicación.
  • Por medio de derbyrun.jar
Para efectos prácticos trabajaremos con la última opción: derbyrun.jar

Por medio de derbyrun.jar podremos interactuar desde modo consola con Apache Derby, les recuerdo que si es la primera vez que me leen, pueden referirse a la primera parte de esta entrega en un blog anterior:

Instalación de Apache Derby 10.14.1.0 en Ubuntu Server 16.04 Parte I

Por tanto, nuestro ejercicio se desarrolla en el entorno de Ubuntu 16.04 (GNU/Linux). Aclaro esto ya que la semántica de comandos, está totalmente aplicada en el sistema operativo antes mencionado.
Entremos ya en esencia...


1. Colocando las variables de ambiente respectivas.
La guía inicial de Derby recomienda establecer una variable de ambiente llamada DERBY_HOME, esta referenciando el directorio donde encontraremos los binarios de Derby. Para ello recomiendo hacer un bash/script en el cuál podamos definir estas variables al momento de operar dentro del sistema operativo con Derby.

Por acá les dejo cómo me quedó mi script:

 
* Quiero aclarar que si hemos realizado una instalación desde PPA del JDK de Java, la variable DERBY_HOME, estará originalmente apuntada hacia el directorio de instalación del JDK y no hacia Derby. Es por ello que recomiendo hacerlo de esta manera.

Ejecutaremos el script por medio del comando source, para que en la sesión activa las variables tomen el valor correspondiente:



Ojo:
Recomiendo que dentro del directorio de su afinidad creen una carpeta en la cual puedan realizar las operaciones con Derby, ya que Derby realizará los cambios, sobre el directorio que se encuentren.
* En el caso de este tutorial, el directorio de prácticas es /home/derby/derbytutor.

2. Probando nuestra instalación.
Podemos validar que la instalación previa de Derby se haya hecho correctamente, para ello comenzaremos a interactuar con derbyrun.jar:

Ejecutemos el comando sysinfo, el cuál nos mostrará la información de nuestro sistema operativo:



En la imagen anterior podemos ver qué importante se vuelve el seteo de la variable de ambiente DERBY_HOME. Puesto que al usar la interacción con derbyrun.jar estaremos recurrentemente interactuando con este programa.


3. Creando nuestra base de datos, tablas, proyecciones, inserciones, eliminaciones, actualizaciones...

Para estas operaciones, utilizaremos otra utilidad de Derby: ij (nos recuerda a sqlplus de Oracle XD)
ij nos permitirá ya ver materializado el objetivo de un motor RDBMS: Llenar de datos una base.


Creemos la base:

derby@vps158271:~/derbytutor$ java -jar $DERBY_HOME/lib/derbyrun.jar ij
ij version 10.14
ij> CONNECT 'jdbc:derby:mundialito;create=true';

ij> EXIT;


Por medio de este comando, ya dentro de ij creamos una base. Para salir de la interfaz usamos "exit;" 

Salí de la interfaz de ij para que validemos qué se crea a nivel de archivos físicos al momento de crear un base en Derby:

Carpeta con el nombre de la base y este es su contenido. Advierto que la modificación directa sobre estos archivos físicos puede generar inconsistencias posteriores, asi que procuremos no tocarlos directamente:

derby@vps158271:~/derbytutor$ ls -thor
total 148K
-rw-r--r-- 1 derby  26K Nov 25 15:41 loadFLIGHTS1.sql
-rw-r--r-- 1 derby  17K Nov 25 15:41 loadFLIGHTAVAILABILITY2.sql
-rw-r--r-- 1 derby  22K Nov 25 15:41 loadFLIGHTAVAILABILITY1.sql
-rw-r--r-- 1 derby 7.6K Nov 25 15:41 loadCOUNTRIES.sql
-rw-r--r-- 1 derby 7.3K Nov 25 15:41 loadCITIES.sql
-rw-r--r-- 1 derby  984 Nov 25 15:41 loadAIRLINES.sql
-rw-r--r-- 1 derby 1019 Nov 25 15:41 loadTables.sql
-rw-r--r-- 1 derby  29K Nov 25 15:41 loadFLIGHTS2.sql
-rw-r--r-- 1 derby 5.1K Nov 25 15:41 ToursDB_schema.sql
drwxrwxr-x 4 derby 4.0K Nov 25 16:10 firstdb
-rw-rw-r-- 1 derby  661 Dec  2 23:26 derby.log
drwxrwxr-x 5 derby 4.0K Dec  2 23:26 mundialito


derby@vps158271:~/derbytutor$ pwd
/home/derby/derbytutor
derby@vps158271:~/derbytutor$ tree mundialito/
mundialito/
├── dbex.lck
├── db.lck
├── log
│   ├── log1.dat
│   ├── log.ctrl
│   ├── logmirror.ctrl
│   └── README_DO_NOT_TOUCH_FILES.txt
├── README_DO_NOT_TOUCH_FILES.txt
├── seg0
│   ├── c101.dat
│   ├── c10.dat
│   ├── c111.dat
│   ├── c121.dat
 ...
│   ├── cd1.dat
│   ├── ce1.dat
│   ├── cf0.dat
│   └── README_DO_NOT_TOUCH_FILES.txt
├── service.properties
└── tmp


Ahora interactuemos con DDL y sentencias SQL en la base mundialito:

Creemos las tabla SELECCION, que contendrá las 32 selecciones clasificadas al mundial:


derby@vps158271:~/derbytutor$ java -jar $DERBY_HOME/lib/derbyrun.jar ij
ij version 10.14
ij> CONNECT 'jdbc:derby:mundialito';
ij> CREATE TABLE SELECCION
> (ID INT PRIMARY KEY,
> NAME VARCHAR(50));
0 rows inserted/updated/deleted
ij> SELECT * FROM SELECCION;
ID |NAME
--------------------------------------------------------------

0 rows selected


Procedamos a insertar registros y proyectemos el registro recién insertado:

ij> INSERT INTO SELECCION (ID, NAME)
> VALUES
> (1,'ALEMANIA');
1 row inserted/updated/deleted
ij> SELECT * FROM SELECCION;
ID |NAME
--------------------------------------------------------------
1 |ALEMANIA

1 row selected 


Ahora, eliminemos el registro recién insertado:

ij> DELETE FROM SELECCION
> WHERE ID = 1;
1 row inserted/updated/deleted


En Derby, también podemos hacer ejecuciones de archivos scripts .sql. Basta con que el archivo se encuentre dentro del directorio de ejecución. En el siguiente ejemplo insertaremos todas las selecciones clasificadas:

Mi archivo sigue la siguiente estructura:

 

Ejecución:

ij> run 'selecciones2018.sql';
ij> INSERT INTO SELECCION (ID, NAME) VALUES (1, 'ALEMANIA');
1 row inserted/updated/deleted
ij> INSERT INTO SELECCION (ID, NAME) VALUES (2,'EGIPTO');
1 row inserted/updated/deleted
ij> INSERT INTO SELECCION (ID, NAME) VALUES (3,'MARRUECOS');
1 row inserted/updated/deleted
ij> INSERT INTO SELECCION (ID, NAME) VALUES (4,'NIGERIA');
1 row inserted/updated/deleted
ij> INSERT INTO SELECCION (ID, NAME) VALUES (5,'SENEGAL');
1 row inserted/updated/deleted
ij> INSERT INTO SELECCION (ID, NAME) VALUES (6,'TUNEZ');
1 row inserted/updated/deleted
ij> INSERT INTO SELECCION (ID, NAME) VALUES (7,'ARABIA SAUDITA');
1 row inserted/updated/deleted
ij> INSERT INTO SELECCION (ID, NAME) VALUES (8,'AUSTRALIA');
1 row inserted/updated/deleted
ij> INSERT INTO SELECCION (ID, NAME) VALUES (9,'IRAN');
1 row inserted/updated/deleted
ij> INSERT INTO SELECCION (ID, NAME) VALUES (10,'JAPON');
1 row inserted/updated/deleted

...


Proyectemos los datos recién ingresados:

ij> SELECT * FROM SELECCION; 
ID         |NAME                                              
--------------------------------------------------------------
1          |ALEMANIA                                          
2          |EGIPTO                                            
3          |MARRUECOS                                         
4          |NIGERIA                                           
5          |SENEGAL                                           
6          |TUNEZ                                             
7          |ARABIA SAUDITA                                    
8          |AUSTRALIA                                         
9          |IRAN                                              
10         |JAPON                                             
 ...


 Y concluiremos esta segunda entrega, con la actualización de un registro:

ij> UPDATE SELECCION
> SET NAME = 'ESPANA'
> WHERE ID = 15;
1 row inserted/updated/deleted
ij> SELECT * FROM SELECCION WHERE ID = 15;
ID         |NAME                                              
--------------------------------------------------------------
15         |ESPANA                                            

1 row selected
ij> 

No hay comentarios:

Publicar un comentario