Sei sulla pagina 1di 24
Java Database Connectivity (JDBC) Al finalizar el capítulo, el alumno podrá:  Diseñar base de
Java Database Connectivity (JDBC) Al finalizar el capítulo, el alumno podrá:  Diseñar base de
Java Database Connectivity (JDBC)
Al finalizar el capítulo, el alumno podrá:
 Diseñar base de datos simples.
 Desarrollar consultas.
 Realizar operaciones SQL de mantenimiento a base de datos.
Temas
1. Creación de base de datos, tablas y relaciones
2. Consultas
3. Inserción, eliminación y actualización
4. Conectividad con Java
5. El paquete java.sql

6. Metadatos

7. Retorno y vista de consultas en el browser

Java Database Connectivity (JDBC)

148

1. Creación de base de datos, tablas y relaciones

148 1. Creación de base de datos, tablas y relaciones Un buen diseño de Base de
148 1. Creación de base de datos, tablas y relaciones Un buen diseño de Base de

Un buen diseño de Base de Datos permite mejorar el rendimiento de un sistema, por lo tanto, es fundamental darse el tiempo para diseñar la estructura que debe tener la base de datos.

Un análisis del funcionamiento permitirá controlar y corregir los pequeños problemas que puedan surgir en el sistema. Para realizar el análisis, se puede recurrir a diferentes herramientas externas que darán una visión detallada de cuáles son los patrones de funcionamiento de Base de Datos y centrarse en aquellos apartados más conflictivos.

Gran parte de las cualidades esperadas en una buena base de datos se basan en su diseño inicial, que constituye los cimientos de cualquier sistema de información actual. El diseño de Base de Datos debe estar bien definido antes de pasar a otra etapa, dada la dificultad y el coste de realizar cambios en el diseño en etapas posteriores. El diseño de Bases de Datos se compone de dos fases altamente diferenciadas: diseño lógico y diseño físico

El diseño lógico consiste en analizar los requerimientos de la empresa y cuáles van a ser los componentes de Base de Datos, como por ejemplo las tablas y las restricciones. El diseño lógico no tiene en cuenta dónde o cómo van a estar almacenados físicamente los datos

El uso efectivo de cualquier base de datos se basa en un buen diseño normalizado. Por su parte, la normalización consiste en el proceso de evitar las redundancias de los datos, la actualización, modificación y borrado de datos en múltiples posiciones. Además, al eliminar la repetición innecesaria de información, se reduce la probabilidad que la base de datos se vuelva inconsistente o contenga errores.

innecesaria de información, se reduce la probabilidad que la base de datos se vuelva inconsistente o
innecesaria de información, se reduce la probabilidad que la base de datos se vuelva inconsistente o
innecesaria de información, se reduce la probabilidad que la base de datos se vuelva inconsistente o
innecesaria de información, se reduce la probabilidad que la base de datos se vuelva inconsistente o
innecesaria de información, se reduce la probabilidad que la base de datos se vuelva inconsistente o

Java Database Connectivity (JDBC)

149

Las sentencias básicas para trabajar con base de datos son las siguientes:

SHOW DATABASES; Muestra las base de datos existentes en MySQL.

CREATE DATABASE dbdat; Crea la base de datos de nombre dbdat.

USE dbdat; Activa la base de datos de nombre dbdat.

DROP DATABASE dbdat; Elimina la base de datos dbdat.

VARCHAR(número) Tiene un número variable de caracteres, el número que se pone es el número
VARCHAR(número)
Tiene un número variable de caracteres, el número que se
pone es el número máximo de caracteres que puede tener
este número va de 1 hasta 255.
CHAR(número)
Tiene un número fijo de caracteres va de 1 hasta 255.
DATE
Tipo fecha (YYYY-MM-DD)-( '1000-01-01' a '9999-12-31')
DATETIME
Tipo fecha y hora (YYYY-MM-DD HH:MM:SS)
INTEGER (INT)
Tipo numérico entero (-2147483648 a 2147483647)
FLOAT(M, D)
Número real de coma flotante M es el número y D los
decimales
(-3.402823466E+38 a -1.175494351E-38, 0, y 1.175494351E-
38 a 3.402823466E+38.)
DOUBLE(M, D)
Número real de doble precisión M es el número y D los
decimales
(- 1.7976931348623157E+308 a -2.2250738585072014E-308,
0, y
2.2250738585072014E-308 a 1.7976931348623157E+308)
BLOB
Para grandes textos, siendo la longitud máxima de 65535. Con
este tipo las búsquedas de texto son sensibles a las
mayúsculas.
TEXT
Para grandes textos, siendo la longitud máxima de 65535. Con
este tipo las búsquedas de texto NO son sensibles a las
mayúsculas.

Una vez creada la base de datos, en ella se crearán las tablas que son los repositorios de datos, para lo cual se deberán definir los tipos de datos que se asignarán en estos repositorios.

Estos tipos de datos pueden ser los siguientes:

definir los tipos de datos que se asignarán en estos repositorios. Estos tipos de datos pueden
definir los tipos de datos que se asignarán en estos repositorios. Estos tipos de datos pueden
definir los tipos de datos que se asignarán en estos repositorios. Estos tipos de datos pueden
definir los tipos de datos que se asignarán en estos repositorios. Estos tipos de datos pueden
definir los tipos de datos que se asignarán en estos repositorios. Estos tipos de datos pueden

Java Database Connectivity (JDBC)

150

1.1 Opciones para las columnas NOT NULL El valor no puede ser nulo en el
1.1 Opciones para las columnas
NOT NULL
El valor no puede ser nulo en el campo.
AUTO_INCREMENT
Automáticamente incrementa el número del registro anterior.
El PRIMARY KEY es un campo que MySQL usa como índice.
Este índice puede hacer cosas como:
PRIMARY KEY
 Hallar rápidamente filas que acierten una cláusula
WHERE.
 Regresar filas de una tabla desde otras tablas cuando se
realizan uniones.
 Esto definitivamente ayudará a agilizar peticiones.
KEY
Crea una llave secundaria
Se puede encontrar mayor información en la siguiente dirección:
http://dev.mysql.com/doc/refman/5.0/es/column-types.html
Ejemplo de los tipos de datos seleccionados para una tabla.
1.2
Tablas
Una tabla es un conjunto de datos sobre un tema concreto para guardar datos de
personas, productos, departamentos, cursos entre otros. Si se usa una tabla
independiente para cada tema, se evitará la duplicación de datos y la Base de Datos
resultará más eficiente, al mismo tiempo que se reducirá el riesgo de errores en la
entrada de datos. En las tablas, los datos están organizados en filas y columnas.

Las sentencias básicas para trabajar con tablas son las siguientes:

SHOW TABLES; Muestra las tablas de la base de datos activa.

básicas para trabajar con tablas son las siguientes:  SHOW TABLES ; Muestra las tablas de
básicas para trabajar con tablas son las siguientes:  SHOW TABLES ; Muestra las tablas de
básicas para trabajar con tablas son las siguientes:  SHOW TABLES ; Muestra las tablas de
básicas para trabajar con tablas son las siguientes:  SHOW TABLES ; Muestra las tablas de
básicas para trabajar con tablas son las siguientes:  SHOW TABLES ; Muestra las tablas de

Java Database Connectivity (JDBC)

151

 CREATE TABLE personas ( idpersona nombres apellidos int NOT NULL AUTO_INCREMENT, varchar(40) NOT NULL,
CREATE TABLE personas (
idpersona
nombres
apellidos
int NOT NULL AUTO_INCREMENT,
varchar(40) NOT NULL,
varchar(40) NOT NULL,
sexo
-- Masculino/Femenino
email
login
char(1) NOT NULL,
varchar(40) NULL,
varchar(10) NOT NULL,
password
telefono
varchar(10) NOT NULL,
varchar(20) NULL,
nacimiento
datetime NULL, -- fecha en que nació
datoAdicional
text NULL
-- dato adicional de persona
);
En el ejemplo anterior, se creó la tabla personas para luego, almacenar en ella,
información de las personas. Los datos de una persona ocupará una fila.
ALTER TABLE personas ADD UNIQUE (login, password);
Altera la tabla personas, para que la unión de login con password no se repita en las
siguientes filas.
DROP TABLE personas;
Elimina la tabla personas.
Vista de una tabla
Vista de una fila de tabla
siguientes filas.  DROP TABLE personas; Elimina la tabla personas. Vista de una tabla Vista de
siguientes filas.  DROP TABLE personas; Elimina la tabla personas. Vista de una tabla Vista de
siguientes filas.  DROP TABLE personas; Elimina la tabla personas. Vista de una tabla Vista de
siguientes filas.  DROP TABLE personas; Elimina la tabla personas. Vista de una tabla Vista de
siguientes filas.  DROP TABLE personas; Elimina la tabla personas. Vista de una tabla Vista de
siguientes filas.  DROP TABLE personas; Elimina la tabla personas. Vista de una tabla Vista de

Java Database Connectivity (JDBC)

152

Vista de una columna de tabla

Java Database Connectivity (JDBC) 152 Vista de una columna de tabla
Java Database Connectivity (JDBC) 152 Vista de una columna de tabla
Java Database Connectivity (JDBC) 152 Vista de una columna de tabla
Java Database Connectivity (JDBC) 152 Vista de una columna de tabla
Java Database Connectivity (JDBC) 152 Vista de una columna de tabla
Java Database Connectivity (JDBC) 152 Vista de una columna de tabla
Java Database Connectivity (JDBC) 152 Vista de una columna de tabla

Java Database Connectivity (JDBC)

153

2.

Consultas

2. Consultas
2. Consultas
2. Consultas
2. Consultas
2. Consultas
Database Connectivity (JDBC) 153 2. Consultas 2. Consultas El lenguaje estructurado de consultas ( SQL )
Database Connectivity (JDBC) 153 2. Consultas 2. Consultas El lenguaje estructurado de consultas ( SQL )

El lenguaje estructurado de consultas (SQL) proporciona la sentencia SELECT, la cual permite hacer consultas a una base de datos. Esta sentencia tiene la siguiente sintaxis:

La siguiente tabla explica cada una de las partes de la sentencia Select.

SELECT Palabra clave que indica que la sentencia de SQL que se desea ejecutar es de selección.

sentencia Select .  SELECT Palabra clave que indica que la sentencia de SQL que se
sentencia Select .  SELECT Palabra clave que indica que la sentencia de SQL que se
sentencia Select .  SELECT Palabra clave que indica que la sentencia de SQL que se
sentencia Select .  SELECT Palabra clave que indica que la sentencia de SQL que se
sentencia Select .  SELECT Palabra clave que indica que la sentencia de SQL que se

Java Database Connectivity (JDBC)

154

Ejemplos:

SELECT * FROM tabla muestra el contenido de toda la tabla

SELECT col1, col2 FROM tabla -- muestra el contenido de columna 1 y 2

FROM Indica la tabla (o tablas) desde la que se desea recuperar los datos. En el caso de que exista más de una tabla se denomina a la consulta "consulta combinada" o "join". En las consultas combinadas es necesario aplicar una condición de combinación, a través de una cláusula ON.

Ejemplos: SELECT * FROM tabla – muestra el contenido de tabla – muestra el contenido
Ejemplos:
SELECT * FROM tabla – muestra el contenido de tabla
– muestra el contenido de tabla1 y tabla2
SELECT tabla1.colx, tabla2.coly FROM tabla1
INNER JOIN tabla2
ON tabla1.id= tabla2.id
WHERE
Especifica una condición que debe cumplirse para que los datos sean devueltos por la
consulta. Además, admite los operadores lógicos AND y OR.
Ejemplos:
– muestra fila de id=5
SELECT * FROM tabla WHERE id=5
– muestra filas cuyas edades estén entre [18, 65]
SELECT * FROM tabla WHERE edad>17 AND edad<66
GROUP BY
Especifica la agrupación que se da a los datos. Se usa siempre en combinación con
funciones agregadas.
Ejemplo:
– muestra lista de alumnos y promedios
SELECT alumnos.alumno, AVG(notas.nota)
FROM alumnos
INNER JOIN notas
ON alumnos.id= notas.id
GROUP BY alumnos

HAVING Especifica una condición que debe cumplirse para que los datos sean devueltos por la consulta. Su funcionamiento es similar al de WHERE, pero aplicado al conjunto de resultados devueltos por la consulta. Debe aplicarse siempre junto a GROUP BY y la condición debe estar referida a los campos contenidos en ella.

consulta. Debe aplicarse siempre junto a GROUP BY y la condición debe estar referida a los
consulta. Debe aplicarse siempre junto a GROUP BY y la condición debe estar referida a los
consulta. Debe aplicarse siempre junto a GROUP BY y la condición debe estar referida a los
consulta. Debe aplicarse siempre junto a GROUP BY y la condición debe estar referida a los
consulta. Debe aplicarse siempre junto a GROUP BY y la condición debe estar referida a los

Java Database Connectivity (JDBC)

155

Ejemplo:

muestra lista de alumnos y promedios mayor o igual a 11 SELECT alumnos.alumno, AVG(notas.nota) FROM alumnos INNER JOIN notas ON alumnos.id= notas.id GROUP BY alumnos HAVING AVG(notas.nota)>=11

ORDER BY Presenta el resultado ordenado por las columnas indicadas. El orden puede expresarse con ASC (orden ascendente) y DESC (orden descendente). El valor predeterminado es ASC.

Ejemplo: –lista de alumnos y promedios mayor o igual a 11 en orden de mérito
Ejemplo:
–lista de alumnos y promedios mayor o igual a 11 en orden de mérito
SELECT alumnos.alumno, AVG(notas.nota)
FROM alumnos
INNER JOIN notas
ON alumnos.id= notas.id
GROUP BY alumnos
HAVING AVG(notas.nota)>=11
ORDER BY 2 DESC
FROM alumnos INNER JOIN notas ON alumnos.id= notas.id GROUP BY alumnos HAVING AVG(notas.nota)>=11 ORDER BY 2
FROM alumnos INNER JOIN notas ON alumnos.id= notas.id GROUP BY alumnos HAVING AVG(notas.nota)>=11 ORDER BY 2
FROM alumnos INNER JOIN notas ON alumnos.id= notas.id GROUP BY alumnos HAVING AVG(notas.nota)>=11 ORDER BY 2
FROM alumnos INNER JOIN notas ON alumnos.id= notas.id GROUP BY alumnos HAVING AVG(notas.nota)>=11 ORDER BY 2
FROM alumnos INNER JOIN notas ON alumnos.id= notas.id GROUP BY alumnos HAVING AVG(notas.nota)>=11 ORDER BY 2

Java Database Connectivity (JDBC)

156

3. Inserción, eliminación y actualización

3. Inserción, eliminación y actualización
3. Inserción, eliminación y actualización
3. Inserción, eliminación y actualización
3. Inserción, eliminación y actualización
3. Inserción, eliminación y actualización
3. Inserción, eliminación y actualización
3. Inserción, eliminación y actualización
INSERT Ejemplo También, es posible insertar datos desde otra tabla. Por ejemplo:
INSERT
Ejemplo
También, es posible insertar datos desde otra tabla. Por ejemplo:

3.1

La sentencia INSERT permite insertar valores dentro de una tabla y tiene dos formas importantes a considerar.

de una tabla y tiene dos formas importantes a considerar. Si no se especifican columnas es
de una tabla y tiene dos formas importantes a considerar. Si no se especifican columnas es
de una tabla y tiene dos formas importantes a considerar. Si no se especifican columnas es

Si no se especifican columnas es porque se van ingresar datos a todas las columnas.

dos formas importantes a considerar. Si no se especifican columnas es porque se van ingresar datos
dos formas importantes a considerar. Si no se especifican columnas es porque se van ingresar datos
dos formas importantes a considerar. Si no se especifican columnas es porque se van ingresar datos
dos formas importantes a considerar. Si no se especifican columnas es porque se van ingresar datos
dos formas importantes a considerar. Si no se especifican columnas es porque se van ingresar datos

Java Database Connectivity (JDBC)

157

3.2 UPDATE

Es posible modificar el contenido de las columnas de una tabla con la sentencia UPDATE.

de las columnas de una tabla con la sentencia UPDATE. Ejemplo: Nota: También, es posible actualizar
Ejemplo: Nota: También, es posible actualizar una tabla desde otras tablas. Por ejemplo:
Ejemplo:
Nota:
También, es posible actualizar una tabla desde otras tablas. Por ejemplo:

Si no se colocara la condición (Where telefono=’498-8020’), entonces todas las filas serían cambiadas a este teléfono.

En este caso, se actualiza el teléfono de aquellas personas que no tienen teléfono y se les da el teléfono de Jorge Risco.

3.3 DELETE

Con esta sentencia se puede eliminar una o más filas de una tabla.

y se les da el teléfono de Jorge Risco. 3.3 DELETE Con esta sentencia se puede
y se les da el teléfono de Jorge Risco. 3.3 DELETE Con esta sentencia se puede
y se les da el teléfono de Jorge Risco. 3.3 DELETE Con esta sentencia se puede
y se les da el teléfono de Jorge Risco. 3.3 DELETE Con esta sentencia se puede
y se les da el teléfono de Jorge Risco. 3.3 DELETE Con esta sentencia se puede
y se les da el teléfono de Jorge Risco. 3.3 DELETE Con esta sentencia se puede

Java Database Connectivity (JDBC)

158

Ejemplo:

Java Database Connectivity (JDBC) 158 Ejemplo: En el ejemplo, se retira de la tabla alumnos ,

En el ejemplo, se retira de la tabla alumnos, las filas que tienen por teléfono 348-8020.

También:

, las filas que tienen por teléfono 348-8020 . También: En este caso, se eliminan todas
En este caso, se eliminan todas las filas de la tabla Alumnos. También, es posible
En este caso, se eliminan todas las filas de la tabla Alumnos.
También, es posible retirar filas de una tabla, según características de otra tabla.

En el ejemplo anterior, se retira de la tabla NombreTelefono, a aquellas filas que coinciden el valor de la columna Telefono con el teléfono de Jorge Risco de la tabla Alumnos.

a aquellas filas que coinciden el valor de la columna Telefono con el teléfono de Jorge
a aquellas filas que coinciden el valor de la columna Telefono con el teléfono de Jorge
a aquellas filas que coinciden el valor de la columna Telefono con el teléfono de Jorge
a aquellas filas que coinciden el valor de la columna Telefono con el teléfono de Jorge
a aquellas filas que coinciden el valor de la columna Telefono con el teléfono de Jorge

Java Database Connectivity (JDBC)

159

4. Conectividad con Java

4. Conectividad con Java
4. Conectividad con Java
4. Conectividad con Java
4. Conectividad con Java
4. Conectividad con Java
4. Conectividad con Java
El puente JDBC-ODBC
El puente JDBC-ODBC

La conectividad de la base de datos de Java (JDBC, Java Database Connectivity) es un marco de programación para los desarrolladores de Java que escriben los programas que tienen acceso a la información guardada en bases de datos. JDBC, se utiliza comúnmente para conectar un programa del usuario con una base de datos por “detrás de la escena”, sin importar qué software de administración o manejo de base de datos se utilice para controlarlo.

En Java existen 4 formas de usar JDBC para conexión con base de datos:

.4.1

Se usará, inicialmente, para facilitar la comunicación con el gestor SQL Server. Para esto se necesita del ODBC (Open Database Connectivity) de Microsoft, a través del cual se creará un DSN (Data Source Name) que permitirá crear una cadena de conexión de información sobre la base de datos.

4.2 Driver de Java parcialmente nativo

Esta forma está integrada por controladores que se comunican con el servidor de base de datos en el protocolo nativo del servidor. Por ejemplo, para el gestor DB2 se necesitaría un driver nativo de DB2 de IBM. Para Informix, se requerirá de un driver nativo de Informix de Unix.

4.3 Driver JDBC-Net de Java puro

En esta forma los drivers están hechos en Java puro; sin embargo, utilizan protocolos estándares, como por ejemplo HTTP con servidor de base de datos. El servidor traduce el protocolo de red. Para el caso de Windows, puede usar ODBC.

HTTP con servidor de base de datos. El servidor traduce el protocolo de red. Para el
HTTP con servidor de base de datos. El servidor traduce el protocolo de red. Para el
HTTP con servidor de base de datos. El servidor traduce el protocolo de red. Para el
HTTP con servidor de base de datos. El servidor traduce el protocolo de red. Para el
HTTP con servidor de base de datos. El servidor traduce el protocolo de red. Para el

Java Database Connectivity (JDBC)

160

4.4 Driver de protocolo de Java puro

En esta última forma, conformada por drivers de java puro, la comunicación es a través de un protocolo específico para la marca de base de datos que se usa. Para mostrar un ejemplo del driver de protocolo de Java puro, se debe crear un proyecto en NetBeans y agregar al nodo Libraries, el driver de MySQL.

NetBeans y agregar al nodo Libraries , el driver de MySQL. Luego, cree una clase Java

Luego, cree una clase Java con el siguiente contenido:

Luego, cree una clase Java con el siguiente contenido: Si se tiene esta salida, entonces ya
Luego, cree una clase Java con el siguiente contenido: Si se tiene esta salida, entonces ya

Si se tiene esta salida, entonces ya se tendrá conexión a la base de datos test de MySQL.

con el siguiente contenido: Si se tiene esta salida, entonces ya se tendrá conexión a la
con el siguiente contenido: Si se tiene esta salida, entonces ya se tendrá conexión a la
con el siguiente contenido: Si se tiene esta salida, entonces ya se tendrá conexión a la
con el siguiente contenido: Si se tiene esta salida, entonces ya se tendrá conexión a la
con el siguiente contenido: Si se tiene esta salida, entonces ya se tendrá conexión a la
con el siguiente contenido: Si se tiene esta salida, entonces ya se tendrá conexión a la

Java Database Connectivity (JDBC)

161

5. El paquete java.sql

5. El paquete java.sql (Connection, Statement, PreparedStatement y ResultSet)
5. El paquete java.sql (Connection, Statement,
PreparedStatement y ResultSet)
5. El paquete java.sql (Connection, Statement, PreparedStatement y ResultSet)
5. El paquete java.sql (Connection, Statement, PreparedStatement y ResultSet)
5. El paquete java.sql (Connection, Statement, PreparedStatement y ResultSet)
5. El paquete java.sql (Connection, Statement, PreparedStatement y ResultSet)
Connection Ejemplo de su uso: Connection cn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/test",
Connection
Ejemplo de su uso:
Connection cn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test", "root", "mysql");
Statement

Es una implementación de la API JDBC (usada para acceder a bases de datos SQL) donde se agrupa una serie de objetos como: Connection, Statement, PreparedStatement, ResulSet, ResultSetMetaData y otros.

5.1

Permite la conexión a la base de datos. Origina un canal entre una aplicación y la base de datos. Será siempre imprescindible en una aplicación que quiere acceder a una base de datos.

5.2

Este objeto permitirá ejecutar una sentencia SQL para una base de datos, por ejemplo:

select, insert, update y delete.

Ejemplo de su uso:

Sring sql = “SELECT * FROM provincias“; Connection cn = db.getConnection(); Statement st = cn. createStatement(); ResultSet rs = st. executeQuery(sql);

Connection cn = db.getConnection(); Statement st = cn. createStatement(); ResultSet rs = st. executeQuery(sql);
Connection cn = db.getConnection(); Statement st = cn. createStatement(); ResultSet rs = st. executeQuery(sql);
Connection cn = db.getConnection(); Statement st = cn. createStatement(); ResultSet rs = st. executeQuery(sql);
Connection cn = db.getConnection(); Statement st = cn. createStatement(); ResultSet rs = st. executeQuery(sql);
Connection cn = db.getConnection(); Statement st = cn. createStatement(); ResultSet rs = st. executeQuery(sql);

Java Database Connectivity (JDBC)

162

5.3

PreparedStatement

Este objeto permitirá ejecutar una sentencia SQL para una base de datos usando parámetros de envío; por ejemplo: select, insert, update y delete.

Ejemplo de su uso:

Sring sql = “SELECT * FROM provincias LIMIT ?, ?“; Connection cn = db.getConnection(); PreparedStatement ps = cn.prepareStatement(sql); ps.setLong(1, 50); ps.setLong(2, 50); ResultSet rs = ps.executeQuery();

5.4 ResulSet Si el objeto Statement ejecuta una sentencia Select del SQL, entonces, éste devuelve
5.4
ResulSet
Si el objeto Statement ejecuta una sentencia Select del SQL, entonces, éste devuelve
un conjunto de resultados. Este conjunto de resultados es asignado y manipulado por
un objeto ResulSet.
Ejemplo de su uso:
Sring sql = “SELECT * FROM provincias“;
Connection cn = db.getConnection();
Statement st = cn. createStatement();
ResultSet rs = st. executeQuery(sql);
Tablas de métodos
Clase Connection - Resumen de métodos
void
clearWarnings()
Limpia todos los warnings reportados por el objeto Connection.
void
close()
Libera la base de datos de este objeto Connection y de los
recursos consumidos por JDBC.
void
commit()
Ejecuta todos los cambios hechos desde el previo commit/rollback
y libera a la base de datos de actuales bloqueos por este objeto
Connection.
Statement
createStatement()
Crea un objeto Statement para enviar una sentencia SQL a la
base de datos.
Statement
createStatement(int resultSetType, int resultSetConcurrency)
Crea un objeto Statement, el cual generará objetos ResulSet con
un tipo y concurrencia dada.
String
getCatalog()
Retorna el nombre del actual catálogo o base de datos.

Java Database Connectivity (JDBC)

163

Clase Connection - Resumen de métodos DatabaseMetaData getMetaData() Recupera un objeto DatabaseMetaData, el cual
Clase Connection - Resumen de métodos
DatabaseMetaData
getMetaData()
Recupera un objeto DatabaseMetaData, el cual contiene metadata
de la base de datos con la que este objeto Connection ha
establecido la conexión.
SQLWarning
getWarnings()
Recupera el primer warning reportado por la ejecución de este
objeto Connection.
boolean
isClosed()
Retorna true si el objeto Connection fue cerrado.
boolean
isReadOnly()
Retorna true si el objeto Connection es de modo read-only.
void
rollback()
Deja sin efecto todos los cambios hechos en la actual transacción
y libera bloqueos en la base de datos retenidos por este objeto
Connection.
void
setCatalog(String catalog)
Establece el nombre del catálogo o de la base de datos con la
cuál trabajará este objeto Connection.
void
setReadOnly(boolean readOnly)
Pone esta conexión en modo read-only habilitando al driver para
optimizaciones sobre la base de datos.
Clase Statement - Resumen de métodos
void
addBatch(String sql)
Adiciona un comando SQL dado a la actual lista de comandos de este
objeto Statement.
void
cancel()
Cancela este objeto Statement, si tanto el DBMS y el driver soportan
abortar una sentencia SQL.
void
clearBatch()
Limpia el objeto Statement de la actual lista de comandos SQL.
void
clearWarnings()
Limpia todos los warnings reportados por este objeto Statement.
void
close()
Libera la base de datos de este objeto Statement y de los recursos
consumidos por JDBC.
boolean
execute(String sql)
Ejecuta una sentencia SQL y retorna true, si retorna resultados.

Java Database Connectivity (JDBC)

164

Clase Statement - Resumen de métodos int[] executeBatch() Ejecuta un lote de comandos SQL sobre
Clase Statement - Resumen de métodos
int[]
executeBatch()
Ejecuta un lote de comandos SQL sobre una base de datos. Si la
ejecución fue satisfactoria, retorna un arreglo de actualizaciones
incluidas.
ResultSet
executeQuery(String sql)
Ejecuta una sentencia SELECT del SQL y retorna un único ResulSet.
int
executeUpdate(String sql)
Ejecuta una sentencia SQL como un INSERT, UPDATE o DELETE; o
una sentencia SQL que no retorne nada como una sentencia DDL del
SQL.
int
getQueryTimeout()
Recupera el número de segundos que el driver esperará para que un
objeto Statement se ejecute.
ResultSet
getResultSet()
Recupera el actual resultado de un objeto ResultSet.
SQLWarning
getWarnings()
Recupera la primera warning reportada por la llamada a este objeto
Statement.
void
setCursorName(String name)
Establece un nombre de cursor SQL, el cual puede ser usado por
posteriores métodos del objeto Statement.
void
setQueryTimeout(int seconds)
Establece el número de segundos que el driver esperará para que un
objeto Statement se ejecute.
Clase ResultSet - Resumen de métodos
absolute(int row)
boolean
Mueve
el
cursor
al
número
de
fila
determinada
en
este
objeto
ResultSet.
void
cancelRowUpdates()
Cancela los cambios realizados en la fila actual de este objeto
ResultSet.
void
close()
Libera base de datos este objeto ResultSet JDBC y recursos
inmediatamente en lugar de esperar a que esto suceda cuando se
cierra automáticamente.
void
deleteRow()
Elimina la fila actual de este objeto ResultSet y de la base de datos
subyacente.
int
findColumn(String columnName)
Asigna el nombre de la columna de resultados a su índice de la
columna de resultados.

Java Database Connectivity (JDBC)

165

Clase ResultSet - Resumen de métodos boolean first() Mueve el cursor a la primera fila
Clase ResultSet - Resumen de métodos
boolean
first()
Mueve el cursor a la primera fila de este objeto ResultSet.
boolean
getBoolean(int columnIndex)
Recupera el valor de la columna designada en la fila actual de este
objeto ResultSet como un booleano en el lenguaje de programación
Java.
boolean
getBoolean(String columnName)
Recupera el valor de la columna designada en la fila actual de este
objeto ResultSet como un booleano en el lenguaje de programación
Java.
getByte(int columnIndex)
byte
Recupera el valor de la columna designada en la fila actual de este
objeto ResultSet como un byte en el lenguaje de programación Java.
getByte(String columnName)
byte
Recupera el valor de la columna designada en la fila actual de este
objeto ResultSet como un byte en el lenguaje de programación Java.
String
getCursorName()
Recupera el Nombre del cursor SQL utilizada por Objeto ResultSet.
Date
getDate(int columnIndex)
Recupera el valor de la columna designada en la fila actual de este
objeto ResultSet como objeto java.sql.Date en el lenguaje de
programación Java.
Date
getDate(String columnName)
Recupera el valor de la columna designada en la fila actual de este
objeto ResultSet como objeto java.sql.Date en el lenguaje de
programación Java.
getDouble(int columnIndex)
double
Recupera el valor de la columna designada en la fila actual de este
objeto ResultSet como un doble en el lenguaje de programación Java.
getDouble(String columnName)
double
Recupera el valor de la columna designada en la fila actual de este
objeto ResultSet como un doble en el lenguaje de programación Java.
getFloat(int columnIndex)
float
Recupera el valor de la columna designada en la fila actual de este
objeto ResultSet como un float en el lenguaje de programación Java.
getFloat(String columnName)
float
Recupera el valor de la columna designada en la fila actual de este
objeto ResultSet como un float en el lenguaje de programación Java.
getInt(int columnIndex)
int
Recupera el valor de la columna designada en la fila actual de este
objeto ResultSet como un entero en el lenguaje de programación Java.
int
getInt(String columnName)
Recupera el valor de la columna designada en la fila actual de este
objeto ResultSet como un entero en el lenguaje de programación Java.

Java Database Connectivity (JDBC)

166

Clase ResultSet - Resumen de métodos long getLong(int columnIndex) Recupera el valor de la columna
Clase ResultSet - Resumen de métodos
long
getLong(int columnIndex)
Recupera el valor de la columna designada en la fila actual de este
objeto ResultSet como un entero long en el lenguaje de programación
Java.
long
getLong(String columnName)
Recupera el valor de la columna designada en la fila actual de este
objeto ResultSet como un entero long en el lenguaje de programación
Java.
ResultSetMeta
Data
getMetaData()
Recupera el número, los tipos y las propiedades de las columnas de
este objeto ResultSet.
int
getRow()
Recupera el número de fila actual.
short
getShort(int columnIndex)
Recupera el valor de la columna designada en la fila actual de este
objeto ResultSet como un entero short en el lenguaje de programación
Java.
short
getShort(String columnName)
Recupera el valor de la columna designada en la fila actual de este
objeto ResultSet como un entero short en el lenguaje de programación
Java.
getString(int columnIndex)
String
Recupera el valor de la columna designada en la fila actual de este
objeto ResultSet como String en el lenguaje de programación Java.
getString(String columnName)
String
Recupera el valor de la columna designada en la fila actual de este
objeto ResultSet como String en el lenguaje de programación Java.
Time
getTime(int columnIndex)
Recupera el valor de la columna designada en la fila actual de este
objeto ResultSet como a java.sql.Time en el lenguaje de programación
Java
Time
getTime(String columnName)
Recupera el valor de la columna designada en la fila actual de este
objeto ResultSet como a java.sql.Time en el lenguaje de programación
Java.
Timestamp
getTimestamp(int columnIndex)
Recupera el valor de la columna designada en la fila actual de este
objeto ResultSet como a java.sql. Timestamp en el lenguaje de
programación Java.
Timestamp
getTimestamp(String columnName)
Recupera el valor de la columna designada en la fila actual de este
objeto ResultSet como a java.sql. Timestamp en el lenguaje de
programación Java.
int
getType()
Recupera el tipo de este objeto ResultSet.

Java Database Connectivity (JDBC)

167

Clase ResultSet - Resumen de métodos insertRow() void Inserta el contenido de la fila de
Clase ResultSet - Resumen de métodos
insertRow()
void
Inserta el contenido de la fila de inserción en este objeto ResultSet y
en la base de datos.
isAfterLast()
boolean
Recupera si el cursor está después de la última fila de este objeto
ResultSet.
isBeforeFirst()
boolean
Recupera si el cursor está delante de la primera fila de este objeto
ResultSet.
boolean
isFirst()
Recupera si el cursor está en la primera fila de este objeto ResultSet.
boolean
isLast()
Recupera si el cursor está en la última fila de este objeto ResultSet.
boolean
last()
Mueve el cursor a la última fila de este objeto ResultSet.
void
moveToInsertRow()
Mueve el cursor a la fila de inserción.
boolean
next()
Mueve el cursor una fila hacia abajo desde su posición actual.
boolean
previous()
Mueve el cursor a la fila anterior de este objeto ResultSet.
void
refreshRow()
Actualiza la fila actual con su valor más reciente en la base de datos.
relative(int rows)
boolean
Mueve el cursor de un número relativo de las filas, ya sea positiva o
negativa.
boolean
wasNull()
Reporta si la última columna leída tiene un valor SQL NULL.
las filas, ya sea positiva o negativa. boolean wasNull() Reporta si la última columna leída tiene
las filas, ya sea positiva o negativa. boolean wasNull() Reporta si la última columna leída tiene
las filas, ya sea positiva o negativa. boolean wasNull() Reporta si la última columna leída tiene
las filas, ya sea positiva o negativa. boolean wasNull() Reporta si la última columna leída tiene
las filas, ya sea positiva o negativa. boolean wasNull() Reporta si la última columna leída tiene

Java Database Connectivity (JDBC)

168

6.

Metadatos

6. Metadatos
6. Metadatos
6. Metadatos  ResultSetMetaData informa sobre tipos de datos, nombres, cantidad de columnas y mucho más.
6. Metadatos  ResultSetMetaData informa sobre tipos de datos, nombres, cantidad de columnas y mucho más.

ResultSetMetaData informa sobre tipos de datos, nombres,

cantidad de columnas y mucho más.

6. Metadatos  ResultSetMetaData informa sobre tipos de datos, nombres, cantidad de columnas y mucho más.
de datos, nombres, cantidad de columnas y mucho más. En ocasiones, se necesitan hacer aplicaciones en

En ocasiones, se necesitan hacer aplicaciones en Java que trabajen contra una base de datos desconocida, de la que no se sabe qué tablas tiene, ni cuales son sus columnas en cada tabla. Es, por ejemplo, el caso de aplicaciones que permiten visualizar el contenido (o incluso modificar el mismo) de una base de datos cualquiera, de una forma genérica. En este tipo de aplicaciones, a veces también se deja que el usuario escriba sus propias sentencias SELECT que el programa luego ejecuta y debe mostrar los resultados.

Las clases DataBaseMetaData y ResultSetMetaData permiten, respectivamente, analizar la estructura de una base de datos (qué tablas tiene, qué columnas cada tabla, de qué tipos, etc.) o de un ResultSet de una consulta, para averiguar cuántas columnas tiene dicho ResulSet, de qué columnas de base de datos proceden, de qué tipo son, etc.

ResultSetMetaData Un objeto de esta clase tiene información meta sobre el conjunto de resultados, como por ejemplo: cuántas columnas tiene la consulta, los nombres de las columnas, los tipos de datos que guarda cada columna, cuántas filas, etc.

Ejemplo de su uso:

Sring sql = “SELECT * FROM provincias“; Connection cn = db.getConnection(); Statement st = cn. createStatement(); ResultSet rs = st. executeQuery(sql); ResultSetMetaData rsmd = rs.getMetaData(); int ctascols = rsmd.getColumnCount();

ResultSet rs = st. executeQuery(sql); ResultSetMetaData rsmd = rs.getMetaData(); int ctascols = rsmd.getColumnCount();
ResultSet rs = st. executeQuery(sql); ResultSetMetaData rsmd = rs.getMetaData(); int ctascols = rsmd.getColumnCount();
ResultSet rs = st. executeQuery(sql); ResultSetMetaData rsmd = rs.getMetaData(); int ctascols = rsmd.getColumnCount();
ResultSet rs = st. executeQuery(sql); ResultSetMetaData rsmd = rs.getMetaData(); int ctascols = rsmd.getColumnCount();
ResultSet rs = st. executeQuery(sql); ResultSetMetaData rsmd = rs.getMetaData(); int ctascols = rsmd.getColumnCount();

Java Database Connectivity (JDBC)

169

7. Retorno y vista de consultas en el Browser

7. Retorno y vista de consultas en el browser Para mostrar una consulta en el
7. Retorno y vista de consultas en el browser
Para mostrar una consulta en el browser, se debe considerar lo siguiente:
Los datos se muestran en una tabla HTML, por lo tanto, deben tener los estilos de
tablas para que ésta sea cebra, es decir, filas pares de un color y pares de otro color.
Asimismo, cuando el cursor pasa sobre una de las filas, ésta debe cambiar el color
para indicar al cliente la fila seleccionada.
Las filas devueltas por el servidor deben ser mostradas considerando la instrucción
foreach de JSTL (http://java.sun.com/jsp/jstl/core), es decir, Java Standar Tag Library.
El otro aspecto a considerar es la lectura a la base de datos para obtener la
información a mostrar al cliente, por lo tanto, se debe considerar lo siguiente:
-
El driver a usar, según la base de datos.
-
La conexión de Java con el respectivo driver para acceder a la base de datos.
-
Tener una instrucción Statement para ejecutar una sentencia SQL.

- Tener una instrucción ResultSet para recoger la información leída de la base de datos.

- Tener una instrucción ResultSetMetaData para que informe de la metadata recogida por la consulta.

- Finalmente, un objeto List que encapsule la información y se lo envíe al cliente.

recogida por la consulta. - Finalmente, un objeto List que encapsule la información y se lo
recogida por la consulta. - Finalmente, un objeto List que encapsule la información y se lo
recogida por la consulta. - Finalmente, un objeto List que encapsule la información y se lo
recogida por la consulta. - Finalmente, un objeto List que encapsule la información y se lo
recogida por la consulta. - Finalmente, un objeto List que encapsule la información y se lo

Java Database Connectivity (JDBC)

170

El siguiente fragmento de código muestra las consideraciones de lectura a la base de datos:

Connectivity (JDBC) 170 El siguiente fragmento de código muestra las consideraciones de lectura a la base
Connectivity (JDBC) 170 El siguiente fragmento de código muestra las consideraciones de lectura a la base
Connectivity (JDBC) 170 El siguiente fragmento de código muestra las consideraciones de lectura a la base
Connectivity (JDBC) 170 El siguiente fragmento de código muestra las consideraciones de lectura a la base
Connectivity (JDBC) 170 El siguiente fragmento de código muestra las consideraciones de lectura a la base
Connectivity (JDBC) 170 El siguiente fragmento de código muestra las consideraciones de lectura a la base