Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Temas
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.
USE dbdat;
Activa la base de datos de nombre 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.
http://dev.mysql.com/doc/refman/5.0/es/column-types.html
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
2. Consultas
2. Consultas
SELECT
Palabra clave que indica que la sentencia de SQL que se desea ejecutar es de
seleccin.
Java Database Connectivity (JDBC) 154
Ejemplos:
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:
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:
GROUP BY
Especifica la agrupacin que se da a los datos. Se usa siempre en combinacin con
funciones agregadas.
Ejemplo:
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:
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:
3.1 INSERT
La sentencia INSERT permite insertar valores dentro de una tabla y tiene dos formas
importantes a considerar.
Ejemplo
3.2 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:
3.3 DELETE
Ejemplo:
En el ejemplo, se retira de la tabla alumnos, las filas que tienen por telfono 348-8020.
Tambin:
Tambin, es posible retirar filas de una tabla, segn caractersticas de otra tabla.
En Java existen 4 formas de usar JDBC para conexin con base de datos:
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.
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.
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
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.
5. El paquete java.sql
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:
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:
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:
Tablas 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.
getCatalog()
String
Retorna el nombre del actual catlogo o base de datos.
Java Database Connectivity (JDBC) 163
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.
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
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.
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
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
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
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
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.
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:
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.