Conceptos Clave en Informática: XML, Java y Bases de Datos
1. Procesamiento y Estructura de Datos con XML, SAX y DOM
XML (eXtensible Markup Language) es un metalenguaje extensible de etiquetas. Se define como un archivo de texto plano, con extensión .xml, en el que a través de etiquetas clasificamos la información que queremos almacenar. Está estructurado en etiquetas DTD (Document Type Definition) para validar los XML.
SAX (Simple API para XML)
En el procesamiento XML adoptado por SAX, se lee un fichero XML de forma secuencial y se produce una secuencia de eventos correspondientes al comienzo/fin del documento, comienzo o fin de una determinada etiqueta, etc. Cada evento invoca a un método definido por el programador.
DOM (Document Object Model) en Java
Para trabajar con DOM en Java, se debe hacer uso de las clases y métodos del paquete org.w3c.dom y el paquete javax.xml.parser del API estándar de Java. DOM necesita como mínimo estas interfaces:
- Document: Es un objeto que equivale a un ejemplar de un documento XML. Permite crear nuevos nodos en el documento.
- Element: Cada elemento del documento XML tiene un equivalente en un objeto de este tipo. Expone propiedades y métodos para manipular los elementos del documento y sus atributos.
- Node: Representa un nodo del documento.
- NodeList: Una lista con los nodos hijos de un nodo.
- Attr: Representa los atributos de un nodo.
- Text: Son los datos carácter de un elemento.
- CharacterData: Representa los datos carácter. Proporciona atributos y métodos para manipular los datos de caracteres.
- DocumentType: Contiene la información contenida en la etiqueta
<!DOCTYPE...>.
Concepto de Array
Un Array es una estructura de datos que nos permite almacenar un conjunto de datos de un mismo tipo, en posiciones consecutivas de memoria.
2. Interfaces en Java: Definición y Usos
Los métodos componen la interfaz del objeto con el mundo exterior, con métodos con sus cuerpos vacíos. Todos los métodos declarados en una interfaz son por defecto públicos (public) y abstractos (abstract). Los atributos declarados en una interfaz son por defecto public, static y final.
Para implementar la herencia en Java, usamos la palabra reservada extends. La palabra static declara miembros (atributos y métodos) que están asociados a una clase en vez de a una instancia de la clase. Es decir, la máquina de chucherías es de todos.
Una interfaz es una plantilla para la construcción de clases. Se compone de un conjunto de declaraciones de cabeceras de métodos (sin implementar, de forma similar a un método abstracto) que especifican un protocolo para una o varias clases.
Usos de las Interfaces
Las interfaces pueden emplearse para:
- Declarar constantes.
- Simular la herencia múltiple.
- Identificar las similitudes entre clases no relacionadas.
- Declarar métodos implementados por una o varias clases.
- Dar a conocer la interfaz de programación de un objeto sin revelar el verdadero cuerpo de la clase.
Declaración de Interfaces y su Implementación
¿Cómo se declara una interfaz?
public interface NombreDeLaInterfaz {
// Declaración de métodos y constantes
}¿Cómo se crea una clase que implementa una interfaz?
public class MiClase implements NombreDeLaInterfaz {
// Implementación de los métodos de la interfaz
}3. Db4o: Motor de Base de Datos Orientado a Objetos
Db4o es un motor de datos (base de datos orientada a objetos) que ofrece varias formas de realizar consultas:
- Query By Example (QBE): Es la forma más sencilla. Recibe un objeto de ejemplo y busca objetos en la base de datos del mismo tipo y con coincidencia de atributos.
- Native Queries (NQ): Son las consultas nativas. Es la interfaz principal de la base de datos para consultas más complejas.
- SODA (Simple Object Data Access): Es una API interna. Se usa para generar consultas dinámicamente. Es mucho más potente y rápida que las anteriores.
Consultas con SODA en Db4o
En SODA, las consultas necesitan de un objeto de tipo Query, que se genera al llamar al método query() de la clase ObjectContainer. A este objeto Query, se le añaden restricciones (constraints) para definir la consulta que se quiere obtener. Una vez definida la consulta, se ejecuta llamando al método execute().
Los métodos más importantes que podemos aplicar después de descender un nivel sobre la consulta (ej. consulta.descend("atributo")) son:
constrain(Object): Añade una restricción a la consulta.orderAscending(): Ordena la consulta resultante, según este campo, y en orden ascendente.orderDescending(): Ordena la consulta en orden descendente.
También se pueden añadir restricciones y propiedades a cada restricción, después de la llamada al método constrain():
and,or: Unen varias restricciones.not: Niega esta restricción, buscando elementos que no la cumplan.:(Coincidencia no estricta): Busca coincidencias de forma no estricta.greater,smaller: Buscan valores más grandes que, o menores que el valor dado.
Actualización y Borrado de Objetos en Db4o
Para la actualización de un objeto, lo primero que debemos hacer es una recuperación del mismo, a través del método queryByExample(). Después, modificar el valor del objeto recuperado a través del método set() correspondiente y por último volverlo a guardar en la base de datos con la modificación realizada a través del método store().
El borrado de datos en Db4o implica buscar el objeto con la consulta correspondiente y borrarlo mediante el método delete().
db.store(obj); // Insertar o modificar un objeto
db.delete(obj); // Borrar un objeto
4. Conectividad a Bases de Datos: ODBC y JDBC
ODBC (Open Database Connectivity)
ODBC define una API (Application Programming Interface – Interfaz para Programas de Aplicación) que pueden usar las aplicaciones para abrir una conexión con una base de datos, enviar consultas, actualizaciones y obtener resultados.
JDBC (Java Database Connectivity)
JDBC define una API que pueden usar los programas Java para conectarse a los servidores de base de datos relacionales. Pone a nuestra disposición un conjunto de clases e interfaces para conectar a nuestra base de datos, enviar cualquier consulta o instrucción y recuperar y procesar los resultados recibidos de la base de datos en respuesta a las consultas enviadas.
Pasos para el Funcionamiento de un Programa con JDBC
El funcionamiento de un programa con JDBC requiere los siguientes pasos:
- Importar las clases necesarias.
- Cargar el driver JDBC.
- Identificar el origen de datos.
- Crear un objeto
Connection. - Crear un objeto
Statement. - Ejecutar una consulta de datos con el objeto
Statement. - Recuperar los datos del objeto
ResultSet. - Liberar el objeto
Statement. - Liberar el objeto
Connection.
Clases e Interfaces Clave de JDBC
- Driver
- Permite conectarse a una base de datos; cada gestor de base de datos requiere un driver distinto.
- DriverManager
- Permite gestionar todos los drivers instalados en el sistema.
- DriverPropertyInfo
- Proporciona diversa información acerca de un driver.
- Connection
- Representa una conexión con una base de datos. Una aplicación puede tener más de una conexión.
- DatabaseMetadata
- Proporciona información acerca de una Base de Datos, como las tablas que contiene, etc.
- Statement
- Permite ejecutar sentencias SQL sin parámetros.
- PreparedStatement
- Permite ejecutar sentencias SQL con parámetros de entrada.
- CallableStatement
- Permite ejecutar sentencias SQL con parámetros de entrada y salida, como las llamadas a procedimientos almacenados.
- ResultSet
- Contiene las filas resultantes de ejecutar una orden
SELECT. - ResultSetMetadata
- Permite obtener información sobre un
ResultSet, como el número de columnas, sus nombres, etc.
Mapeo de Acciones SQL a Métodos JDBC
| Acción SQL | Método Java (JDBC) |
|---|---|
INSERT INTO... | executeUpdate() |
SELECT ... | executeQuery() |
UPDATE ... | executeUpdate() |
DELETE FROM ... | executeUpdate() |
El establecimiento de una conexión con una base de datos utiliza la clase: DriverManager.
