Está en la página 1de 24

Java Database Connectivity (JDBC)

Al finalizar el captulo, el alumno podr:

Disear base de datos simples.


Desarrollar consultas.
Realizar operaciones SQL de mantenimiento a base de datos.

Temas

1. Creacin de base de datos, tablas y relaciones


2. Consultas
3. Insercin, eliminacin y actualizacin
4. Conectividad con Java
5. El paquete java.sql
6. Metadatos
7. Retorno y vista de consultas en el browser

Programa Java Fundamentals Developer


Java Database Connectivity (JDBC) 148

1. Creacin de base de datos, tablas y relaciones

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

Un anlisis del funcionamiento permitir controlar y corregir los pequeos problemas que
puedan surgir en el sistema. Para realizar el anlisis, se puede recurrir a diferentes
herramientas externas que darn una visin detallada de cules son los patrones de
funcionamiento de Base de Datos y centrarse en aquellos apartados ms conflictivos.

Gran parte de las cualidades esperadas en una buena base de datos se basan en su diseo
inicial, que constituye los cimientos de cualquier sistema de informacin actual. El diseo 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 diseo en etapas posteriores. El diseo de Bases de Datos se
compone de dos fases altamente diferenciadas: diseo lgico y diseo fsico

El diseo lgico consiste en analizar los requerimientos de la empresa y cules van a ser los
componentes de Base de Datos, como por ejemplo las tablas y las restricciones. El diseo
lgico no tiene en cuenta dnde o cmo van a estar almacenados fsicamente los datos

El uso efectivo de cualquier base de datos se basa en un buen diseo normalizado. Por su
parte, la normalizacin consiste en el proceso de evitar las redundancias de los datos, la
actualizacin, modificacin y borrado de datos en mltiples posiciones. Adems, al eliminar la
repeticin innecesaria de informacin, se reduce la probabilidad que la base de datos se vuelva
inconsistente o contenga errores.
Java Database Connectivity (JDBC) 149

Las sentencias bsicas 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.

Una vez creada la base de datos, en ella se crearn las tablas que son los repositorios de
datos, para lo cual se debern definir los tipos de datos que se asignarn en estos repositorios.

Estos tipos de datos pueden ser los siguientes:

Tiene un nmero variable de caracteres, el nmero que se


VARCHAR(nmero) pone es el nmero mximo de caracteres que puede tener
este nmero va de 1 hasta 255.

CHAR(nmero) Tiene un nmero 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 numrico entero (-2147483648 a 2147483647)

Nmero real de coma flotante M es el nmero y D los


decimales
FLOAT(M, D)
(-3.402823466E+38 a -1.175494351E-38, 0, y 1.175494351E-
38 a 3.402823466E+38.)
Nmero real de doble precisin M es el nmero y D los
decimales
DOUBLE(M, D) (- 1.7976931348623157E+308 a -2.2250738585072014E-308,
0, y
2.2250738585072014E-308 a 1.7976931348623157E+308)

Para grandes textos, siendo la longitud mxima de 65535. Con


BLOB este tipo las bsquedas de texto son sensibles a las
maysculas.

Para grandes textos, siendo la longitud mxima de 65535. Con


TEXT este tipo las bsquedas de texto NO son sensibles a las
maysculas.
Java Database Connectivity (JDBC) 150

1.1 Opciones para las columnas

NOT NULL El valor no puede ser nulo en el campo.

AUTO_INCREMENT Automticamente incrementa el nmero del registro anterior.


El PRIMARY KEY es un campo que MySQL usa como ndice.
Este ndice puede hacer cosas como:
Hallar rpidamente filas que acierten una clusula
PRIMARY KEY 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 informacin en la siguiente direccin:

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 duplicacin de datos y la Base de Datos
resultar ms eficiente, al mismo tiempo que se reducir el riesgo de errores en la
entrada de datos. En las tablas, los datos estn organizados en filas y columnas.

Las sentencias bsicas para trabajar con tablas son las siguientes:

SHOW TABLES;
Muestra las tablas de la base de datos activa.
Java Database Connectivity (JDBC) 151

CREATE TABLE personas (


idpersona int NOT NULL AUTO_INCREMENT,
nombres varchar(40) NOT NULL,
apellidos varchar(40) NOT NULL,
sexo char(1) NOT NULL, -- Masculino/Femenino
email varchar(40) NULL,
login varchar(10) NOT NULL,
password varchar(10) NOT NULL,
telefono 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,


informacin 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 unin 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


Java Database Connectivity (JDBC) 152

Vista de una columna de tabla


Java Database Connectivity (JDBC) 153

2. Consultas

2. Consultas

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
seleccin.
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 ms de una tabla se denomina a la consulta "consulta combinada" o "join".
En las consultas combinadas es necesario aplicar una condicin de combinacin, a
travs de una clusula ON.

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 condicin que debe cumplirse para que los datos sean devueltos por la
consulta. Adems, admite los operadores lgicos AND y OR.

Ejemplos:

muestra fila de id=5


SELECT * FROM tabla WHERE id=5

muestra filas cuyas edades estn entre [18, 65]


SELECT * FROM tabla WHERE edad>17 AND edad<66

GROUP BY
Especifica la agrupacin que se da a los datos. Se usa siempre en combinacin 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 condicin 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
condicin debe estar referida a los campos contenidos en ella.
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 mrito


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
Java Database Connectivity (JDBC) 156

3. Insercin, eliminacin y actualizacin

3. Insercin, eliminacin y actualizacin

3.1 INSERT

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

Ejemplo

Tambin, es posible insertar datos desde otra tabla. Por ejemplo:

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


Java Database Connectivity (JDBC) 157

3.2 UPDATE

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


UPDATE.

Ejemplo:

Nota:
Si no se colocara la condicin (Where telefono=498-8020), entonces todas las filas seran
cambiadas a este telfono.

Tambin, es posible actualizar una tabla desde otras tablas. Por ejemplo:

En este caso, se actualiza el telfono de aquellas personas que no tienen telfono y se


les da el telfono de Jorge Risco.

3.3 DELETE

Con esta sentencia se puede eliminar una o ms filas de una tabla.


Java Database Connectivity (JDBC) 158

Ejemplo:

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

Tambin:

En este caso, se eliminan todas las filas de la tabla Alumnos.

Tambin, es posible retirar filas de una tabla, segn caractersticas 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 telfono de Jorge Risco de la tabla
Alumnos.
Java Database Connectivity (JDBC) 159

4. Conectividad con Java

4. Conectividad con Java

La conectividad de la base de datos de Java (JDBC, Java Database Connectivity) es un marco


de programacin para los desarrolladores de Java que escriben los programas que tienen
acceso a la informacin guardada en bases de datos.
JDBC, se utiliza comnmente para conectar un programa del usuario con una base de datos
por detrs de la escena, sin importar qu software de administracin o manejo de base de
datos se utilice para controlarlo.

En Java existen 4 formas de usar JDBC para conexin con base de datos:

.4.1 El puente JDBC-ODBC

Se usar, inicialmente, para facilitar la comunicacin con el gestor SQL Server. Para
esto se necesita del ODBC (Open Database Connectivity) de Microsoft, a travs del
cual se crear un DSN (Data Source Name) que permitir crear una cadena de
conexin de informacin 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
necesitara 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 estn hechos en Java puro; sin embargo, utilizan protocolos
estndares, 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.
Java Database Connectivity (JDBC) 160

4.4 Driver de protocolo de Java puro

En esta ltima forma, conformada por drivers de java puro, la comunicacin es a travs
de un protocolo especfico 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.

Luego, cree una clase Java con el siguiente contenido:

Si se tiene esta salida, entonces ya se tendr conexin a la base de datos test de


MySQL.
Java Database Connectivity (JDBC) 161

5. El paquete java.sql

5. El paquete java.sql (Connection, Statement,


PreparedStatement y ResultSet)

Es una implementacin 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 Connection

Permite la conexin a la base de datos. Origina un canal entre una aplicacin y la base
de datos. Ser siempre imprescindible en una aplicacin que quiere acceder a una
base de datos.

Ejemplo de su uso:

Connection cn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test", "root", "mysql");

5.2 Statement

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);
Java Database Connectivity (JDBC) 162

5.3 PreparedStatement

Este objeto permitir ejecutar una sentencia SQL para una base de datos usando
parmetros de envo; 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
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 mtodos

Clase Connection - Resumen de mtodos

clearWarnings()
void
Limpia todos los warnings reportados por el objeto Connection.

close()
void Libera la base de datos de este objeto Connection y de los
recursos consumidos por JDBC.

commit()
Ejecuta todos los cambios hechos desde el previo commit/rollback
void
y libera a la base de datos de actuales bloqueos por este objeto
Connection.

createStatement()
Statement Crea un objeto Statement para enviar una sentencia SQL a la
base de datos.

createStatement(int resultSetType, int resultSetConcurrency)


Statement Crea un objeto Statement, el cual generar objetos ResulSet con
un tipo y concurrencia dada.

getCatalog()
String
Retorna el nombre del actual catlogo o base de datos.
Java Database Connectivity (JDBC) 163

Clase Connection - Resumen de mtodos

getMetaData()
Recupera un objeto DatabaseMetaData, el cual contiene metadata
DatabaseMetaData de la base de datos con la que este objeto Connection ha
establecido la conexin.
getWarnings()
SQLWarning Recupera el primer warning reportado por la ejecucin de este
objeto Connection.

isClosed()
boolean
Retorna true si el objeto Connection fue cerrado.

isReadOnly()
boolean
Retorna true si el objeto Connection es de modo read-only.

rollback()
Deja sin efecto todos los cambios hechos en la actual transaccin
void
y libera bloqueos en la base de datos retenidos por este objeto
Connection.

setCatalog(String catalog)
void Establece el nombre del catlogo o de la base de datos con la
cul trabajar este objeto Connection.

setReadOnly(boolean readOnly)
void Pone esta conexin en modo read-only habilitando al driver para
optimizaciones sobre la base de datos.

Clase Statement - Resumen de mtodos

addBatch(String sql)
void Adiciona un comando SQL dado a la actual lista de comandos de este
objeto Statement.

cancel()
void Cancela este objeto Statement, si tanto el DBMS y el driver soportan
abortar una sentencia SQL.

clearBatch()
void
Limpia el objeto Statement de la actual lista de comandos SQL.

clearWarnings()
void
Limpia todos los warnings reportados por este objeto Statement.

close()
void Libera la base de datos de este objeto Statement y de los recursos
consumidos por JDBC.

execute(String sql)
boolean
Ejecuta una sentencia SQL y retorna true, si retorna resultados.
Java Database Connectivity (JDBC) 164

Clase Statement - Resumen de mtodos

int[] executeBatch()
Ejecuta un lote de comandos SQL sobre una base de datos. Si la
ejecucin fue satisfactoria, retorna un arreglo de actualizaciones
incluidas.

executeQuery(String sql)
ResultSet
Ejecuta una sentencia SELECT del SQL y retorna un nico ResulSet.

executeUpdate(String sql)
Ejecuta una sentencia SQL como un INSERT, UPDATE o DELETE; o
int
una sentencia SQL que no retorne nada como una sentencia DDL del
SQL.

getQueryTimeout()
int Recupera el nmero de segundos que el driver esperar para que un
objeto Statement se ejecute.

getResultSet()
ResultSet
Recupera el actual resultado de un objeto ResultSet.

getWarnings()
SQLWarning Recupera la primera warning reportada por la llamada a este objeto
Statement.

setCursorName(String name)
void Establece un nombre de cursor SQL, el cual puede ser usado por
posteriores mtodos del objeto Statement.

setQueryTimeout(int seconds)
void Establece el nmero de segundos que el driver esperar para que un
objeto Statement se ejecute.

Clase ResultSet - Resumen de mtodos

absolute(int row)
boolean Mueve el cursor al nmero de fila determinada en este objeto
ResultSet.

cancelRowUpdates()
void Cancela los cambios realizados en la fila actual de este objeto
ResultSet.

close()
Libera base de datos este objeto ResultSet JDBC y recursos
void
inmediatamente en lugar de esperar a que esto suceda cuando se
cierra automticamente.

deleteRow()
void Elimina la fila actual de este objeto ResultSet y de la base de datos
subyacente.

findColumn(String columnName)
int 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 mtodos

first()
boolean
Mueve el cursor a la primera fila de este objeto ResultSet.

getBoolean(int columnIndex)
Recupera el valor de la columna designada en la fila actual de este
boolean
objeto ResultSet como un booleano en el lenguaje de programacin
Java.

getBoolean(String columnName)
Recupera el valor de la columna designada en la fila actual de este
boolean
objeto ResultSet como un booleano en el lenguaje de programacin
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 programacin 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 programacin Java.

getCursorName()
String
Recupera el Nombre del cursor SQL utilizada por Objeto ResultSet.

getDate(int columnIndex)
Recupera el valor de la columna designada en la fila actual de este
Date
objeto ResultSet como objeto java.sql.Date en el lenguaje de
programacin Java.
getDate(String columnName)
Recupera el valor de la columna designada en la fila actual de este
Date
objeto ResultSet como objeto java.sql.Date en el lenguaje de
programacin 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 programacin 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 programacin 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 programacin 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 programacin 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 programacin Java.

getInt(String columnName)
Recupera el valor de la columna designada en la fila actual de este
int
objeto ResultSet como un entero en el lenguaje de programacin Java.
Java Database Connectivity (JDBC) 166

Clase ResultSet - Resumen de mtodos

getLong(int columnIndex)
Recupera el valor de la columna designada en la fila actual de este
long
objeto ResultSet como un entero long en el lenguaje de programacin
Java.
getLong(String columnName)
Recupera el valor de la columna designada en la fila actual de este
long
objeto ResultSet como un entero long en el lenguaje de programacin
Java.
getMetaData()
ResultSetMeta
Recupera el nmero, los tipos y las propiedades de las columnas de
Data
este objeto ResultSet.

getRow()
int
Recupera el nmero de fila actual.

getShort(int columnIndex)
Recupera el valor de la columna designada en la fila actual de este
short
objeto ResultSet como un entero short en el lenguaje de programacin
Java.

getShort(String columnName)
Recupera el valor de la columna designada en la fila actual de este
short
objeto ResultSet como un entero short en el lenguaje de programacin
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 programacin 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 programacin Java.

getTime(int columnIndex)
Recupera el valor de la columna designada en la fila actual de este
Time
objeto ResultSet como a java.sql.Time en el lenguaje de programacin
Java
getTime(String columnName)
Recupera el valor de la columna designada en la fila actual de este
Time
objeto ResultSet como a java.sql.Time en el lenguaje de programacin
Java.

getTimestamp(int columnIndex)
Recupera el valor de la columna designada en la fila actual de este
Timestamp
objeto ResultSet como a java.sql. Timestamp en el lenguaje de
programacin Java.

getTimestamp(String columnName)
Recupera el valor de la columna designada en la fila actual de este
Timestamp
objeto ResultSet como a java.sql. Timestamp en el lenguaje de
programacin Java.

getType()
int
Recupera el tipo de este objeto ResultSet.
Java Database Connectivity (JDBC) 167

Clase ResultSet - Resumen de mtodos

insertRow()
void Inserta el contenido de la fila de insercin en este objeto ResultSet y
en la base de datos.

isAfterLast()
boolean Recupera si el cursor est despus de la ltima fila de este objeto
ResultSet.

isBeforeFirst()
boolean Recupera si el cursor est delante de la primera fila de este objeto
ResultSet.

isFirst()
boolean
Recupera si el cursor est en la primera fila de este objeto ResultSet.

isLast()
boolean
Recupera si el cursor est en la ltima fila de este objeto ResultSet.

last()
boolean
Mueve el cursor a la ltima fila de este objeto ResultSet.

moveToInsertRow()
void
Mueve el cursor a la fila de insercin.

next()
boolean
Mueve el cursor una fila hacia abajo desde su posicin actual.

previous()
boolean
Mueve el cursor a la fila anterior de este objeto ResultSet.

refreshRow()
void
Actualiza la fila actual con su valor ms reciente en la base de datos.

relative(int rows)
boolean Mueve el cursor de un nmero relativo de las filas, ya sea positiva o
negativa.

wasNull()
boolean
Reporta si la ltima columna leda tiene un valor SQL NULL.
Java Database Connectivity (JDBC) 168

6. Metadatos

6. Metadatos

ResultSetMetaData informa sobre tipos de datos, nombres,


cantidad de columnas y mucho ms.

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 genrica. En este tipo de
aplicaciones, a veces tambin 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 cuntas columnas tiene dicho ResulSet, de
qu columnas de base de datos proceden, de qu tipo son, etc.

ResultSetMetaData
Un objeto de esta clase tiene informacin meta sobre el conjunto de resultados, como por
ejemplo: cuntas columnas tiene la consulta, los nombres de las columnas, los tipos de datos
que guarda cada columna, cuntas 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();
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 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 instruccin
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


informacin a mostrar al cliente, por lo tanto, se debe considerar lo siguiente:

- El driver a usar, segn la base de datos.

- La conexin de Java con el respectivo driver para acceder a la base de datos.

- Tener una instruccin Statement para ejecutar una sentencia SQL.

- Tener una instruccin ResultSet para recoger la informacin leda de la base


de datos.

- Tener una instruccin ResultSetMetaData para que informe de la metadata


recogida por la consulta.

- Finalmente, un objeto List que encapsule la informacin y se lo enve al cliente.


Java Database Connectivity (JDBC) 170

El siguiente fragmento de cdigo muestra las consideraciones de lectura a la base de


datos:

También podría gustarte