Utilizar La Conectividad de Bases de Datos de Java

18
APÉNDICE F) Utilizar la conectividad de bases de datos de Java (JDBC) . De repente, aparece de nuevo el gran jefe y dice: "Necesitamos conectarnos a una fuente de datos ODBC". "¡Buena suerte!" dices; "No tan buena..." responde el jefazo; "Tienes dos días para conseguirlo". Puede utilizar la conectividad de bases de datos de Java (JDBC), según figura en el paquete java.sql, para conectar una fuente de datos para bases de datos, como una fuente de datos ODBC. Así funciona: se obtiene una conexión a una fuente de base de datos mediante un objeto que implementa la interfaz Connection, se ejecuta una sentencia SQL en la fuente de datos mediante un objeto que implementa la interfaz Statement, y se obtiene un resultado desde la fuente de datos, como un objeto que implementa la interfaz ResultSet. En la tabla F. 1. encontrará los Campos de la interfaz Connection, y sus métodos en la tabla F. 2.; los métodos de la interfaz Statement en la tabla F. 3.; y los campos de la interfaz ResultSet en la tabla F. 4. y sus métodos en la tabla F. 5. Tabla F. 1. Campos de la interfaz Connection Campo Descripción static int TRANSACTION_NONE Indica que las transacciones no son soportadas. Static int TRANSACTION_READ_COMMITTED Se evitan las lecturas parciales; pueden existir lecturas no

description

conectividades de base de datos

Transcript of Utilizar La Conectividad de Bases de Datos de Java

Page 1: Utilizar La Conectividad de Bases de Datos de Java

APÉNDICE F)

Utilizar la conectividad de bases de datos de Java (JDBC) .

De repente, aparece de nuevo el gran jefe y dice: "Necesitamos conectarnos a una fuente de datos ODBC".

"¡Buena suerte!" dices;"No tan buena..." responde el jefazo; "Tienes dos días para conseguirlo".

Puede utilizar la conectividad de bases de datos de Java (JDBC), según figura en el paquete java.sql, para conectar una fuente de datos para bases de datos, como una fuente de datos ODBC. Así funciona: se obtiene una conexión a una fuente de base de datos mediante un objeto que implementa la interfaz Connection, se ejecuta una sentencia SQL en la fuente de datos mediante un objeto que implementa la interfaz Statement, y se obtiene un resultado desde la fuente de datos, como un objeto que implementa la interfaz ResultSet.

En la tabla F. 1. encontrará los Campos de la interfaz Connection, y sus métodos en la tabla F. 2.; los métodos de la interfaz Statement en la tabla F. 3.; y los campos de la interfaz ResultSet en la tabla F. 4. y sus métodos en la tabla F. 5.

Tabla F. 1. Campos de la interfaz Connection

Campo Descripciónstatic int TRANSACTION_NONE Indica que las transacciones no son

soportadas.

Static int TRANSACTION_READ_COMMITTED

Se evitan las lecturas parciales; pueden existir lecturas no repetitivas o fantasmas.

Static int TRANSACTION_READ_UNCOMMITTED

Pueden ocurrir lecturas parciales o no repetitivas o fantasmas.

Static int TRANSACTION_REPEATABLE_READ

Se evitan las lecturas parciales y las no repetitivas; pueden darse lecturas fantasma.

static int TRANSACTION_SERIALIZABLE Pueden darse lecturas parciales, evitándose las no repetitivas y las fantasma.

Page 2: Utilizar La Conectividad de Bases de Datos de Java

Tabla F. 2. Métodos de la interfaz Connection

Método ¿Qué hace?void clearWarnings( ) Elimina los avisos.

void close( ) Genera una base de datos de conexión y recursos JDBC.

void commit( ) Establece los cambios desarrollados desde el último volcado.

Statement createStatement( ) Construye un objeto Statement para enviar sentencias SQL a la base de datos.

Statement createStatement(int resultSetType, int resultSetConcurrency)

Construye un objeto Statement que generará objetos ResultSet.

boolean getAutoCommit( ) Obtiene el estado autocommit actual.

String getCatalog() Obtiene el nombre del catálogo de la conexión actual.

DatabaseMetaData getMetaData( ) Devuelve metadatos sin tener en cuenta la base de datos d la conexión.

int getTransactionIsolation( ) Devuelve el nivel de aislamiento de la transacción actual.

Map getTypeMap( ) Obtiene el tipo de objeto mapa asociado a esta conexión.

SQLWarning getWarnings( ) Genera el primer aviso indicado por llamadas a esta conexión.

boolean isClosed( ) Prueba si una conexión está cerrada.

boolean isReadOnly( ) Prueba si la conexión está en modo de solo lectura.

String nativeSQL(String sql) Convierte la sentencia SQL dada en la gramática SQL nativa del sistema.

CallableStatement prepareCall(String sql) Genera un objeto CallableStatement en procedimientos guardados.

CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency)

Devuelve un objeto CallableStatement que generará objetos ResultSet.

PreparedStatement prepareStatement(String sql)

Genera un objeto PreparedStatement para enviar sentencias SQL parametrizadas a las base de datos.

PreparedStatement prepareStatement (String sql, int resultSetType, int result SetConcurrency)

Obtiene un objeto PreparedStatement que generará objetos ResultSet.

void rollback( ) Descarta los cambios realizados desde el

Page 3: Utilizar La Conectividad de Bases de Datos de Java

último volcado.

void setAutoCommit(boolean autoCommit) Fija el modo AutoCommit para esta conexión.

void setCatalog(String catalog) Establece un nombre del catálogo en la base de datos.

void setReadOnly(boolean readOnly) Señala esta conexión como de sólo lectura.

void setTransactionIsolation(int level) Intenta cambiar el nivel de aislamiento de la transacción.

void setTypeMap(Map map) Instala el tipo de mapa dado.

Tabla F. 3. Métodos de la interfaz Statement

Método Descripciónvoid addBatch(String sql) Añade un comando SQL a la cadena de

comandos actual.

void cancel( ) Cancela este objeto Statement.

void clearBatch( ) Vacía el conjunto de comandos del proceso actual.

void clearWarnings( ) Elimina todos los avisos.

void close( ) Cierra esta base de datos del objeto Statement y los recursos JDBC.

boolean execute(String sql) Ejecuta una sentencia SQL que puede devolver múltiples resultados.

int[] executeBatch( ) Envía a la base de datos un lote de comandos para su ejecución.

ResultSet executeQuery(String sql) Ejecuta una sentencia SQL que devuelve un único ResultSet.

int executeUpdate(String sql) Ejecuta una sentencia SQL INSERT, UPDATE o DELETE.

Connection getConnection( ) Devuelve el objeto Connection que produjo este objeto Statement.

int getFetchDirection( ) Define la dirección de búsqueda de las filas en las tablas de la base de datos.

int getFetchSize( ) Obtiene el número de conjuntos de filas como tamaño de búsqueda predeterminado.

int getMaxFieldSize( ) Devuelve el número máximo de bytes permitido en los valores de una columna.

int getMaxRows( ) Genera el número máximo de filas para

Page 4: Utilizar La Conectividad de Bases de Datos de Java

ResultSet.

boolean getMoreResults( ) Va al siguiente resultado de una sentencia.

int getQueryTimeout( ) Genera el número de segundos que esperará el controlador para que se ejecute una sentencia.

ResultSet getResultSet( ) Devuelve el resultado como objeto ResultSet.

int getResultSetConcurrency( ) Genera un conjunto de resultados simultáneamente.

int getResultSetType( ) Obtiene el tipo del conjunto de resultados.

int getUpdateCount( ) Devuelve el resultado actual como una cuenta actualizada. Si el resultado es un ResultSet o no hay más resultados, se devuelve el valor -1.

SQLWarning getWarnings( ) Genera el primer aviso repostado por llamadas hacia esta sentencia.

void setCursorName(String name) Define el nombre del cursor SQL.

void setEscapeProcessing(boolean enable) Activa o desactiva la opción Escape.

void setFetchDirection(int direction) Define la dirección de búsqueda.

void setFetchSize(int rows) Establece el número de filas que deberían establecerse cuando se necesitan más filas.

void setMaxFieldSize(int max) Define el límite para el máximo número de filas de una columna.

void setMaxRows(int max) Define el límite para el máximo número de filas que puede contener cualquier ResultSet.

void setQueryTimeout(int seconds) Selecciona el número de segundos que esperará el controlador para que se ejecute una sentencia.

Page 5: Utilizar La Conectividad de Bases de Datos de Java

Tabla F. 4 . Campos de la interfaz ResultSet

Campo Descripciónstatic int CONCUR_READ_ONLY Modo simultáneo para objetos que pueden

no ser actualizados.

static int CONCUR_UPDATABLE Modo simultáneo para un objeto ResultSet que puede ser actualizado.

static int FETCH_FORWARD Indica qué filas serán procesadas, de principio a fin.

static int FETCH_REVERSE Define qué filas de un conjunto de resultados serán procesadas, de la última a la primera.

static int FETCH_UNKNOWN Define si el orden de proceso de un conjunto de resultados es desconocido.

static int TYPE_FORWARD_ONLY Establece que el cursor sólo se pueda mover hacia adelante.

static int TYPE_SCROLL_INSENSITIVE Define que un objeto ResultSet pueda sufrir desplazamiento, pero no sea sensible a los cambios hechos por otros.

static int TYPE_SCROLL_SENSITIVE Define que un objeto ResultSet pueda sufrir desplazamiento, y también sea sensible a los cambios hechos por otros.

Tabla F. 5. Métodos de la interfaz ResultSet

Método Descripciónboolean absolute(int row) Se mueve hacia una fila absoluta.

Void afterLast( ) Se mueve hasta después del ultimo registro.

Void beforeFirst( ) Se mueve hasta antes del primer registro.

Void cancelRowUpdates( ) Cancela las actualizaciones hechas en una fila.

Void clearWarnings( ) Elimina todos los avisos.

Void close( ) Cierra la base de datos del objeto ResultSet y los recursos JDBC.

Void deleteRow( ) Borra la fila actual del conjunto de resultados y la base de datos subyacente.

int findColumn(String columnName) Mapea el nombre de la columna ResultSet para su índice de columna ResultSet.

Page 6: Utilizar La Conectividad de Bases de Datos de Java

boolean first( ) Se mueve al primer registro.

Array getArray(int i) Obtiene un valor SQL ARRAY de la fila actual de este objeto ResultSet.

Array getArray(String colName) Obtiene un valor SQL ARRAY en la fila actual de este objeto ResultSet.

InputStream getAsciiStream(int columnIndex)

Devuelve el valor de una columna en la fila actual como una cadena de caracteres ASCII.

InputStream getAsciiStream(String columnName)

Devuelve el valor de una columna en la fila actual como una cadena de caracteres ASCII

BigDecimal getBigDecimal(int columnIndex)

Devuelve el valor de una columna en la fila actual como un objeto java.math.BigDecimal con total precisión.

BigDecimal getBigDecimal(int columnIndex, int scale)

Obsoleto.

BigDecimal getBigDecimal(String columnName)

Genera el valor de una columna en la fila actual como un objeto java.math.BigDecimal con total precisión.

BigDecimal getBigDecimal(String columnName, int scale)

Obsoleto.

InputStream getBinaryStream(int columnIndex)

Devuelve el valor de una columna en la fila actual como una cadena de bytes sin interpretar.

InputStream getBinaryStream(String columnName)

Devuelve el valor de una columna en la fila actual como una cadena de bytes sin interpretar.

Blob getBlob(int i) Define un valor BLOB (Binary Large Object, o gran objeto en formato binario) en la fila actual de este objeto ResultSet.

Blob getBlob(String colName) Define un valor BLOB (Binary Large Object, o gran objeto en formato binario) en la fila actual de este objeto ResultSet.

boolean getBoolean(int columnIndex) Establece el valor de una columna de la fila actual como booleano Java.

boolean getBoolean(String columnName) Establece el valor de una columna de la fila actual como booleano Java.

byte getByte(int columnIndex) Establece el valor de una columna de la fila actual como un byte Java.

byte getByte(String columnName) Establece el valor de una columna de la fila actual como un byte Java.

Page 7: Utilizar La Conectividad de Bases de Datos de Java

byte[] getBytes(int columnIndex) Establece el valor de una columna de la fila actual como una cadena de bytes Java.

byte[] getBytes(String columnName) Establece el valor de una columna de la fila actual como una cadena de bytes Java.

Reader getCharacterStream(int columnIndex)

Devuelve una secuencia de caracteres ordenada por índice de columna.

Reader getCharacterStream(String columnName)

Devuelve una secuencia de caracteres ordenada por nombre de columna.

Clob getClob(int i) Define un valor CLOB (Character Large Object, o gran objeto en formato de caracteres) en la fila actual de este objeto ResultSet.

Clob getClob(String colName) Define un valor CLOB (Character Large Object, o gran objeto en formato de caracteres) en la fila actual de este objeto ResultSet.

int getConcurrency( ) Define el modo de concurrencia de este conjunto de resultados.

String getCursorName( ) Obtiene el nombre del cursor SQL utilizado por este ResultSet.

Date getDate(int columnIndex) Devuelve el valor de una columna de la fila actual como un objeto java.sql.Date.

Date getDate(int columnIndex, Calendar cal)

Devuelve el valor de una columna de la fila actual como un objeto java.sql.Date.

Date getDate(String columnName) Devuelve el valor de una columna de la fila actual como un objeto java.sql.Date.

Date getDate(String columnName, Calendar cal)

Devuelve el valor de una columna de la fila actual como un objeto java.sql.Date.

double getDouble(int columnIndex) Devuelve el valor de una columna de la fila actual como un valor doble de Java.

double getDouble(String columnName) Devuelve el valor de una columna de la fila actual como un valor doble de Java.

int getFetchDirection( ) Define la dirección de búsqueda para este conjunto de resultados.

int getFetchSize( ) Define el tamaño de la búsqueda para este conjunto de resultados.

float getFloat(int columnIndex) Genera el valor de una columna de la fila actual como un valor Java flotante.

float getFloat(String columnName) Genera el valor de una columna de la fila actual como un valor Java flotante.

Page 8: Utilizar La Conectividad de Bases de Datos de Java

int getInt(int columnIndex) Genera el valor de una columna de la fila actual como un valor Java int.

int getInt(String columnName) Genera el valor de una columna de la fila actual como un valor Java int.

long getLong(int columnIndex) Genera el valor de una columna de la fila actual como un valor Java long.

long getLong(String columnName) Genera el valor de una columna de la fila actual como un valor Java long.

ResultSetMetaData getMetaData( ) Devuelve el número, tipos y propiedades de las columnas de ResultSet.

Object getObject(int columnIndex) Genera el valor de una columna de la fila actual como un objeto Java.

Object getObject(int i, Map map) Genera el valor de una columna de la fila actual como un objeto Java.

Object getObject(String columnName) Genera el valor de una columna de la fila actual como un objeto Java.

Object getObject(String colName, Map map)

Devuelve el valor de la columna indicada como un objeto Java.

Ref getRef(int i) Obtiene un valor de referencia de columna de la fila actual.

Ref getRef(String colName) Obtiene un valor de referencia de columna de la fila actual según el nombre de columna.

int getRow( ) Genera una fila.

short getShort(int columnIndex) Devuelve el valor de una columna de la fila actual como un Java short.

short getShort(String columnName) Devuelve el valor de una columna de la fila actual como un Java short.

Statement getStatement( ) Genera la sentencia producida por el objeto ResultSet.

String getString(int columnIndex) Devuelve el valor de una columna de la fila actual como un Java string.

String getString(String columnName) Devuelve el valor de una columna de la fila actual como un Java string.

Time getTime(int columnIndex) Devuelve el valor de una columna de la fila actual como un objeto java.sql.Time.

Time getTime(int columnIndex, Calendar cal)

Devuelve el valor de una columna de la fila actual como un objeto java.sql.Time.

Page 9: Utilizar La Conectividad de Bases de Datos de Java

Time getTime(String columnName) Devuelve el valor de una columna de la fila actual como un objeto java.sql.Time.

Time getTime(String columnName, Calendar cal)

Devuelve el valor de una columna de la fila actual como un objeto java.sql.Time.

Timestamp getTimestamp(int columnIndex) Devuelve el valor de una columna de la fila actual como un objeto java.sql.Timestamp.

Timestamp getTimestamp(int columnIndex, Calendar cal)

Devuelve el valor de una columna de la fila actual como un objeto java.sql.Timestamp.

Timestamp getTimestamp(String columnName)

Devuelve el valor de una columna de la fila actual como un objeto java.sql.Timestamp.

Timestamp getTimestamp(String columnName, Calendar cal)

Devuelve el valor de una columna de la fila actual como un objeto java.sql.Timestamp.

int getType( ) Se obtiene el tipo de este conjunto de resultados.

InputStream getUnicodeStream(int columnIndex)

Obsoleto.

InputStream getUnicodeStream(String columnName)

Obsoleto.

SQLWarning getWarnings( ) Devuelve el primer aviso reportado en este ResultSet.

void insertRow( ) Inserta los contenidos de la fila insertada en el conjunto de resultados y la base de datos.

boolean isAfterLast( ) Devuelve el valor True después del último registro.

boolean isBeforeFirst( ) Devuelve el valor True antes del primer registro.

boolean isFirst( ) Devuelve True si el registro actual es el primero.

boolean isLast( ) Devuelve True si el registro actual es el último.

boolean last( ) Se mueve al ultimo registro.

void moveToCurrentRow( ) Mueve el cursor a la posición del cursor guardada, normalmente a la fila actual.

void moveToInsertRow( ) Mueve el cursor a la fila insertada.

boolean next( ) Mueve el cursor una fila hacia abajo, desde su posición actual.

boolean previous( ) Se mueve al registro anterior.

Page 10: Utilizar La Conectividad de Bases de Datos de Java

void refreshRow( ) Actualiza la fila actual con su valor más reciente de la base de datos.

boolean relative(int rows) Se mueve con relación a la posición actual.

boolean rowDeleted( ) Señala si una fila ha sido borrada.

boolean rowInserted( ) Indica si la fila actual ha recibido una inserción.

boolean rowUpdated( ) Indica si la fila actual ha sido actualizada.

void setFetchDirection(int direction) Proporciona un indicio acerca de la dirección en la que serán procesadas las filas de este conjunto de resultados.

void setFetchSize(int rows) Define el número de filas que deberían buscarse en la base de datos cuando se necesitan más filas.

void updateAsciiStream(int columnIndex, InputStream x, int length)

Actualiza una columna con un valor ASCII stream.

void updateAsciiStream(String columnName, InputStream x, int length)

Actualiza una columna con un valor ASCII stream basándose en un nombre de columna.

void updateBigDecimal(int columnIndex, BigDecimal x)

Actualiza una columna con un valor BigDecimal.

void updateBigDecimal(String columnName, BigDecimal x)

Actualiza una columna con un valor BigDecimal basándose en un nombre de columna.

void updateBinaryStream(int columnIndex, InputStream x, int length)

Actualiza una columna con un valor stream binario.

void updateBinaryStream(String columnName, InputStream x, int length)

Actualiza una columna con un valor stream binario basándose en un nombre de columna.

void updateBoolean(int columnIndex, boolean x)

Actualiza una columna con un valor booleano.

void updateBoolean(String columnName, boolean x)

Actualiza una columna con un valor booleano basándose en un nombre de columna.

void updateByte(int columnIndex, byte x) Actualiza una columna con un valor de byte.

void updateByte(String columnName, byte x)

Actualiza una columna con un valor de byte basándose en un nombre de columna.

void updateBytes(int columnIndex, byte[ ] x)

Updates a column with a byte array value.

Page 11: Utilizar La Conectividad de Bases de Datos de Java

void updateBytes(String columnName, byte[ ] x)

Actualiza una columna con una secuencia de bytes basándose en un nombre de columna.

void updateCharacterStream(int columnIndex, Reader x, int length)

Actualiza una columna con un valor de caracteres stream.

void updateCharacterStream(String columnName, Reader reader, int length)

Actualiza una columna con un valor de caracteres stream basándose en un nombre de columna.

void updateDate(int columnIndex, Date x) Actualiza una columna con un valor de fecha.

void updateDate(String columnName, Date x)

Actualiza una columna con un valor de fecha basándose en un nombre de columna.

void updateDouble(int columnIndex, double x)

Actualiza una columna con un valor doble.

void updateDouble(String columnName, double x)

Actualiza una columna con un valor doble basándose en un nombre de columna.

void updateFloat(int columnIndex, float x) Actualiza una columna con un valor flotante.

void updateFloat(String columnName, float x)

Actualiza una columna con un valor flotante basándose en un nombre de columna.

void updateInt(int columnIndex, int x) Actualiza una columna con un valor entero.

void updateInt(String columnName, int x) Actualiza una columna con un valor entero basándose en un nombre de columna.

void updateLong(int columnIndex, long x) Actualiza una columna con un valor largo.

void updateLong(String columnName, long x)

Actualiza una columna con un valor largo basándose en un nombre de columna.

void updateNull(int columnIndex) Proporciona a una columna nula un valor nulo.

void updateNull(String columnName) Actualiza una columna con un valor nulo.

void updateObject(int columnIndex, Object x)

Actualiza una columna con un valor de objeto.

void updateObject(int columnIndex, Object x, int scale)

Actualiza una columna con un valor de objeto utilizando una escala.

void updateObject(String columnName, Object x)

Actualiza una columna con un valor de objeto basándose en un nombre de columna.

void updateObject(String columnName, Object x, int scale)

Actualiza una columna con un valor de objeto basándose en un nombre de columna, utilizando una escala.

Page 12: Utilizar La Conectividad de Bases de Datos de Java

void updateRow( ) Actualiza la base de datos subyacente con el nuevo contenido de la fila actual.

void updateShort(int columnIndex, short x) Actualiza una columna con un valor corto.

void updateShort(String columnName, short x)

Actualiza una columna con un valor corto basándose en un nombre de columna.

void updateString(int columnIndex, String x)

Actualiza una columna con un valor en cadena.

void updateString(String columnName, String x)

Actualiza una columna con un valor en cadena basándose en un nombre de columna.

void updateTime(int columnIndex, Time x) Actualiza una columna con un valor temporal.

void updateTime(String columnName, Time x)

Actualiza una columna con un valor temporal basándose en un nombre de columna.

boolean wasNull( ) Indica si la última columna leída tenía un valor Null.

Aquí se muestra un ejemplo en el que se ha utilizado una fuente de datos ODBC formada por una tabla llamada Students, con campos Name (nombre) y Grade (curso) para distintos estudiantes:

Name Grade ---------------| Ann | C ||-------|-------|| Mark | B ||-------|-------|| Ed | A ||-------|-------|| Frank | A ||-------|-------|| Ted | A ||-------|-------|| Mabel | B ||-------|-------|| Ralph | B ||-------|-------|| Tom | B | ---------------

Page 13: Utilizar La Conectividad de Bases de Datos de Java

Observe las columnas de la tabla. Se ha creado un nuevo objeto Connection especificando el origen de datos y el protocolo de conexión como "jdbc:odbc:students", lo que indica que el usuario quiere que el controlador JDBC utilice ODBC para realizar la conexión al origen de datos de los estudiantes.

Entonces se ejecutan las sentencias SQL "SELECT Name FROM Students" y "SELECT Grade FROM Students" para generar los resultados correspondientes a las dos columnas de la tabla. Mediante el método next de la clase ResultSet, puede ir hacia la siguiente fila de cada conjunto de resultados y rellenar los controles con datos provenientes de la fuente de datos.

Observe el código (preste atención a la línea Class.forName("sun.jdbc.odbc.JdbcOdbcDriver), necesaria para cargar el controlador JDBC):

import java.net.*;import java.sql.*;import java.awt.*;import java.awt.event.*;

public class jdbc extends Frame{ Choice students; Choice grades; Connection connection; Statement statement;

public jdbc() { students = new Choice(); grades = new Choice();

setLayout(new FlowLayout());

try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

connection = DriverManager.getConnection( "jdbc:odbc:students", "Steve", "password");

statement = connection.createStatement();

String SQL = "SELECT Name FROM Students";

Page 14: Utilizar La Conectividad de Bases de Datos de Java

ResultSet resultset = statement.executeQuery(SQL); while (resultset.next()) students.addItem(resultset.getString(1));

SQL = "SELECT Grade FROM Students"; resultset = statement.executeQuery(SQL); while (resultset.next()) grades.addItem(resultset.getString(1)); } catch(Exception e) {}

add(students); add(grades); }

public static void main (String args[]) { Frame f = new jdbc();

f.setSize(300, 300);

f.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});

f.show(); }

}