ᄎ INACAP Universidad Tecnológica de Chile Sede Santiago Centro Taller de Programación II J2EE Tema 03 Uso de las Bases de Datos con Java Ing. Manuel López R.
Recordando conceptos sobre bases de datos... Las bases de datos son softwares que, básicamente, permiten el almacenamiento y gestión de datos dentro de una organización, alimentando a las aplicaciones con información organizada, jerarquizada y de forma inmediata. Actualmente, es común utilizar en aplicaciones informáticas una base de datos relacional, que permite la creación de esquemas, tablas y columnas, además de proporcionar seguridad mediante el acceso protegido en base a usuarios y contraseñas. rrhh administrativo Base de datos de la organización profesor auxiliar practicante id nombre apellido edad Esquemas Tablas Columnas
Recordando conceptos sobre bases de datos... En una base de datos se pueden encontrar los siguientes elementos: Esquema: constituye una sub-base de datos dentro de la general existente. Tabla: constituye la estructura base de almacenamiento de datos. Está divida en columnas. Columna de tabla: identifican las categorías de datos que serán almacenadas dentro de la tabla. Cada columna tiene un tipo único que restringe el tipo de datos a almacenar dentro de ella. Filas de tabla: representan cada uno de los registros de datos almacenados físicamente en la tabla. Cada uno de estos registros tiene tantos datos como columnas se hayan definido dentro de la tabla. Tabla 'administrativo' integer varchar(20) varchar(20) byte ID Nombre Apellido Edad... 1 Robert Hudson 34... 2 Anna Hamilton 56..................
Recordando conceptos sobre bases de datos... En el mercado existen diferentes tipos de motores de bases de datos: Microsoft SQL Server 200x Oracle Database 10g, 11g, etc. PostgreSQL MySQL Database Informix IBM DB2 Apache Derby (conocido también como JavaDB) Microsoft Access SQLite etc.
Qué utilizaremos en este curso? En este curso se utilizarán dos motores de bases de datos gratuitas y Open Source, llamadas: MySQL Database Apache Derby (conocido también como JavaDB) Se recomienda su uso (también el de PostgreSQL) debido a que: son motores de bases de datos gratuitos (útil para estudiantes) son Open Source (pueden utilizar su código fuente directamente) están codificados en C ó C++ (PostgreSQL y MySQL) y también en Java (como es el caso de Apache Derby o JavaDB) fáciles de instalar y utilizar. De hecho, JavaDB viene incluido con la versión completa de NetBeans!
Para trabajar con JavaDB en NetBeans, seguir los siguientes pasos: 1) Descargar la versión completa de NetBeans, desde la página www.netbeans.org, e instalarla en su computador (normalmente viene dentro del paquete de NetBeans + GlassFish - servidor de aplicaciones para J2EE).
Creación de una nueva base de datos dentro de JavaDB (Apache Derby)
2) Ir al menú Window > Services (o presionar CTRL + F5) para visualizar la ventana de servicios de NetBeans. Si JavaDB está instalado, se podrá ver el ícono característico en dicho panel.
3) Con el botón derecho del ratón, iniciar el servidor de JavaDB, seleccionando la opción StartServer. 4) Crear una nueva base de datos con la opción Create Database...
5) Al crear la base de datos: asignarle un nombre crear un nombre de usuario y una contraseña de acceso. Luego, presione el botón OK.
6) Esperar a que se cree la base de datos. Si todo resulta bien, se podrá observar un ícono anaranjado característico con la URL que permite acceder al motor de base de datos desde una aplicación de Java. 7) Para activar la nueva base de datos (en caso de que aparezca el ícono roto que se muestra en la figura), presionar el botón derecho sobre la base de datos y seleccionar la opción Connect...
8) Cuando la conexión resulta exitosa, se despliega la lista de esquemas de bases de datos ya creadas. Al expandir alguno de los esquemas, se pueden observar la lista de tablas, vistas y procedimientos almacenados ya definidos.
9) Para crear una nueva tabla de base de datos, abra el esquema APP, presione el botón derecho sobre la carpeta Tables y seleccione la opción Create Table... (si va a utilizar el diseñador gráfico) o la opción Execute Command... (si va a crear la tabla utilizando comandos).
10) Asigne un nombre nuevo a la tabla. Luego, presione el botón Add Column por cada columna que desee agregar a la tabla de datos. Indique los tipos de datos y opciones adicionales. Por último, presione el botón OK.
11) Cuando termine de definir la tabla, podrá visualizar la información que se aprecia en la imagen inferior. Con esto, ya ha definido su primera tabla de datos!
12) Establezca el esquema APP como el esquema por omisión, presionando el botón derecho sobre el esquema y seleccionando la opción Set as Default Scheme.
13) Ahora, inserte algunos datos, utilizando la opción Execute Command... Escriba el o los comandos que desee y luego presione el botón Run SQL para ejecutar la petición.
Creación de un proyecto de J2EE en NetBeans con conexión a un motor de base de datos
14) Para construir una aplicación de Java que consuma dichos datos, puede optar por crear un proyecto de JavaSE o JavaEE. Para explorar una aplicación básica, cree un proyecto de JavaSE, sin ninguna clase inicial por omisión.
Colocarle un nombre al proyecto Desactivar esta opción
15) Ya creado el proyecto, crear un archivo fuente vacío, para codificar la clase que accederá a la base de datos (botón derecho sobre el ítem <default package>).
16) Colocar un nombre al archivo para luego comenzar la codificación.
Agregar las bibliotecas de conexión de base de datos para lograr vincular la aplicación de J2EE con JavaDB
17) Antes de comenzar a codificar la clase de Java, es necesario agregar una biblioteca de Java que permitirá al programa tener acceso al driver de conexión con la base de datos JavaDB. Para esto, hacer click derecho sobre la carpeta Libraries del proyecto en curso, seleccionar la opción Add Library... y agregar la biblioteca de clases JavaDB Driver. Presionar el botón Add Library y se visualizará la agregación de la biblioteca dentro del proyecto.
18) La primera parte del código especifica cómo conectar a la aplicación con el motor de base de datos JavaDB. import java.sql.*; public class ConexionBD { public static void main(string[] args) throws SQLException { try { Connection conn; // Se crea la conexión con la base de datos JavaDB. conn = DriverManager.getConnection( "jdbc:derby://localhost:1527/bdejemplo01, inacap, j2ee"); // Se crea el objeto que maneja una sentencia SQL. Statement st = conn.createstatement();
18) La segunda parte del código especifica cómo sacar los datos y presentarlos en pantalla. // Se crea la consulta SQL para JavaDB. ResultSet rs = st.executequery( "select * from app.administrativo"); } } // Si aún existen datos que sacar de la tabla, se extraen. while(rs.next()) { System.out.println("Dato: " + rs.getstring("id")); } } catch(sqlexception e) { System.out.println("Error de SQL:" + e); }
Anexo: Sentencias de SQL para operaciones generales en JavaDB
Sentencias generales de SQL sobre JavaDB Creando una base de datos nueva: Apache Derby no soporta la sentencia create database, por lo que para crear una base de datos nueva debe hacerse a través del gestor de NetBeans, o también utilizando la herramienta ij de Apache Derby, donde se ejecutará la sentencia: connect 'jdbc:derby:mibasededatos;create=true' Crear un nuevo esquema de base de datos: para crear un nuevo esquema de base de datos se puede utilizar la sentencia create schema, como se indica: Por ejemplo: create schema <nombre_esquema_nuevo> create schema ControlAsistencia donde ControlAsistencia es el nombre del nuevo esquema de base de datos. El esquema se creará dentro de la base de datos en uso actualmente.
Sentencias generales de SQL sobre JavaDB Crear una nueva tabla: para crear una nueva tabla de base de datos se utiliza la sentencia create table, como se indica a continuación. Por ejemplo: create table ControlAsistencia.Empleado ( idinterno bigint, nombre varchar(100), direccion varchar(100), edad smallint, tiempocreacion timestamp ) Si se quiere implementar una clave primaria, se puede emplear lo siguiente: create table ControlAsistencia.Empleado ( idinterno bigint constraint idinterno_pk primary key, nombre varchar(100), direccion varchar(100), edad smallint, tiempocreacion timestamp )
Sentencias generales de SQL sobre JavaDB Si se quiere además que la clave primaria sea generada automáticamente en la base de datos (evitando tener que generarla desde la aplicación), se escribe lo siguiente: create table ControlAsistencia.Empleado ( idinterno bigint constraint idinterno_pk primary key generated always as identity, nombre varchar(100), direccion varchar(100), edad smallint, tiempocreacion timestamp ) con lo cual cada nuevo ítem agregado en la tabla tendrá un nuevo identificador único, desde 1 en adelante. Desde ahora en adelante, es obligatorio crear las claves primarias con tipos smallint, int o bigint solamente, de modo que puedan utilizarse los mecanismos antes presentados.
Sentencias generales de SQL sobre JavaDB Alterando columnas y propiedades en tablas: para cambiar propiedades en una tabla, sin borrarla y crearla nuevamente, se utiliza la sentencia alter table, como se muestra a continuación: a) Agregar una nueva columna a la tabla: alter table esquema1.empleado add column telefono varchar(20) b) Borrar una columna existente de la tabla: alter table esquema1.empleado drop column telefono c) Borrar una clave primaria, sin borrar la columna: alter table esquema1.empleado drop primary key d) Asignar una columna de la tabla como clave primaria: alter table esquema1.empleado add primary key(idempleado)
Sentencias generales de SQL sobre JavaDB e) Impedir que una columna acepte valores nulos: alter table esquema1.empleado alter column idinterno not null f) Permitir que una columna acepte valores nulos: alter table esquema1.empleado alter column idinterno null Borrando tablas y esquemas: si se desea borrar una tabla o un esquema de la base de datos se puede utilizar la palabra clave drop: a) Borrar una tabla: drop table esquema1.empleado b) Borrar un esquema de la base de datos (sólo si está vacío): drop schema esquema1 restrict
Sentencias generales de SQL sobre JavaDB Renombrar una tabla o columna: para renombrar tablas o columnas se utiliza la palabra clave rename: a) Renombrar una tabla de base de datos: set schema esquema1; rename table Empleado to EmpleadoEmpresa b) Renombrar una columna de tabla: set schema esquema1; rename column Empleado.idEmpleado to id
Sentencias generales de SQL sobre JavaDB Unir el resultado de dos tablas: en algunos casos es necesario relacionar los datos entre dos tablas, debido a que tienen una relación en el diagrama de base de datos. Supóngase que se tienen dos tablas relacionadas entre sí por una columna de identificador (columna ID en el ejemplo): Tabla Alumno ID Nombre Edad 1 Elena 14 2 Rosario 13 3 Ramiro 14 Tabla RegistroNota IDAlumno Asignatura NroPrueba Nota 1 Mat 1 6.9 1 Mat 2 3.5 2 Mat 1 5.5
Sentencias generales de SQL sobre JavaDB Si se ejecuta la sentencia de SQL: select * from Alumno, RegistroNotas se obtiene el siguiente resultado (lo cual es una "multiplicación de filas", conocido con el nombre de 'cross inner join' o producto cartesiano cruzado de filas), en el cual se unen todas las filas de una tabla con todas las de la otra, aunque no tengan relaciones aparentes: ID Nombre Edad IDAlumno Asignatura NroPrueba Nota 1 Elena 14 1 Mat 1 6.9 2 Rosario 13 1 Mat 1 6.9 3 Ramiro 14 1 Mat 1 6.9 1 Elena 14 1 Mat 2 3.5 2 Rosario 13 1 Mat 2 3.5 3 Ramiro 14 1 Mat 2 3.5 1 Elena 14 2 Mat 1 5.5 2 Rosario 13 2 Mat 1 5.5 3 Ramiro 14 2 Mat 1 5.5
Sentencias generales de SQL sobre JavaDB El resultado anterior también puede obtenerse mediante la sentencia de SQL: select * from Alumno CROSS JOIN RegistroNotas Sin embargo, este producto cartesiano no es muy útil, por lo cual se le agrega (muy a menudo) una cláusula where para filtrar los datos que no tengan ninguna relación entre sí (en este ejemplo, correspondería sólo unir los datos de los alumnos con sus notas respectivas, no con las notas de los demás). Para realizar la relación correcta entre filas de tablas diferentes se recurre a otra operación de SQL, denominada como 'inner join' o producto interno de filas. Para este caso, se escribiría lo siguiente: o bien, select * from Alumno,RegistroNotas where Alumno.ID = RegistroNotas.IDAlumno select * from Alumno INNER JOIN RegistroNotas ON Alumno.ID = RegistroNotas.IDAlumno siendo equivalentes ambas. También se pueden agregar cláusulas where adicionales para probar otras condiciones, etc.