Conceptos Esenciales
-
Upload
peterrigobertogomezcarrasco -
Category
Documents
-
view
221 -
download
4
description
Transcript of Conceptos Esenciales
Instituto de Educación Superior Tecnológico Público“Víctor Álvarez Huapaya”
C a r gar e l c o n t ro lad o r J DBC
Para trabajar con el API JDBC se tiene que importar el paquete java.sql, tal y como se indica a continuación:
import java.sql.*;
En este paquete se definen los objetos que proporcionan toda la funcionalidad que se requiere para el acceso a bases de datos. El siguiente paso después de importar el paquete java.sql consiste en cargar el controlador JDBC, es decir un objeto Driver específico para una base de datos que define cómo se ejecutan las instrucciones para esa base de datos en particular.
Hay varias formas de hacerlo, pero la más sencilla es utilizar el método forName() de la clase Class:
Class.forName("Controlador JDBC");
Para el caso particular del controlador para MySQL, Connector/J, se tiene lo siguiente:
Class.forName("com.mysql.jdbc.Driver");
Debe tenerse en cuenta que el método estático forName() definido por la clase Class genera un objeto de la clase especificada. Cualquier controlador JDBC tiene que incluir una parte de iniciación estática que se ejecuta cuando se carga la clase. En cuanto el cargador de clases carga dicha clase, se ejecuta la iniciación estática, que pasa a registrarse como un controlador JDBC en el DriverManager.
Es decir, el siguiente código: Class.forName("Controlador JDBC");
es equivalente a:
Class c = Class.forName("Controlador JDBC");
Driver driver = (Driver)c.newInstance(); DriverManager.registerDriver(driver);
Algunos controladores no crean automáticamente una instancia cuando se carga la clase. Si forName() no crea por sí solo una instancia del controlador, se tiene que hacer esto de manera explícita:
Class.forName("Controlador JDBC").newInstance();
De nuevo, para el Connector/J:
Class.forName("com.mysql.jdbc.Driver").newInstance();
En toda aplicación de bases de datos con MySQL es indispensable poder establecer la conexión al servidor para posteriormente enviarle las consultas. Los programas en Java no son la excepción. El siguiente código nos servirá para verificar que podemos establecer una conexión a nuestra base de datos transportes
import java.sql.*;
Unidad Didáctica: Taller de Programación Concurrente
Instituto de Educación Superior Tecnológico Público“Víctor Álvarez Huapaya”
public class TestConnection
{
Static String bd=”transportes”;
static String login=”bingo”;
static String password=”hola”;
static String url=”jdbc:mysql://localhost/”+bd;
public static void mian(String[ ] args)throws IOException
{
Connection conn = null;
try
{
Class.forName(“com.mysql.jdbc.Driver).newInstance(); conn = DriverManager.getConnection(url,login,password); if (conn != null)
{
System.out.println(“Conexión a la base de datos ”+bd+”... OK”);
conn.close();
}
}
catch(SQLException ex)
{
System.out.println(ex);
}
catch(ClassNotFoundException ex)
{
System.out.println(ex);
}
}
}
Unidad Didáctica: Taller de Programación Concurrente
Instituto de Educación Superior Tecnológico Público“Víctor Álvarez Huapaya”
En esta programación se inicia importanto el paquete sql perteneciente a java. El signo del asterisco significa que el programa puede hacer uso de culaquier clase contenida en el paquete sql. Se construye la clase TextConnection, estableciendo 4 variables o atributos de tipo String donde se almacena el nombre de la base de datos, el login, la contraseña o password y el url.
Una vez en el método principal llamado main se declara la variable objeto conn y a través de la instrucción try se busca proteger la ejecución ante posibles errores (lo que se denomina manejo de excepciones).
Con la instrucción: Class.forName(“com.mysql.jdbc.Driver).newInstance();, se establece el driver para el gestor de base de datos MySql. Luego en la siguiente línea de programación se establece la conexión con la base de datos a través del método getConnection perteneciente a la clase DriverManager. A través de la sentencia selectiva if se evalúa el éxito de la conexión, por lo tanto, si la variable conn es diferente de null significa que se logró la conexión, caso contrario se mostrará mensajes de error, gracias a la instrucción catch.
A continuación se listan algunas de las salidas que se pueden obtener al ejecutar el programa anterior:
[blu e m a n @ c as i t a ] $ java TestConnection
Conexión a base de datos jdbc:mysql://localhost/agendita ... Ok
(significa: Todo funciona bien)
[blu e m a n @ c as i t a ] $ java TestConnection java.lang.ClassNotFoundException:
com.mysql.jdbc.Driver
(Seguramente no se ha puesto la ruta al archivo connector.jar en la variable de ambiente)
[blu e m a n @ c as i t a ] $ java TestConnection
java.sql.SQLException: Invalid authorization specification: Access denied for u s er : 'bingo@localhost' (Using password: YES)
(El login o el password proporcionados no nos permiten el acceso al servidor)
[blu e m a n @ c as i t a ] $ java TestConnection java.sql.SQLException: No suitable driver
(Probablemente se ha escrito de forma incorrecta el URL para la base de datos)
Unidad Didáctica: Taller de Programación Concurrente
Instituto de Educación Superior Tecnológico Público“Víctor Álvarez Huapaya”
[blu e m a n @ c as i t a ] $ java TestConnection
j ava . s q l . S QL Exc e pti on : General error: Access denied for user: 'bingo@localhost' to database 'transportes'
(Probablemente se ha escrito de manera incorrecta el nombre de la base de datos)
Paquete Java.SQL para trabajar con base de datos
Para realizar una aplicación para que realice cualquier operación de lo
más sencilla posible se necesita de la utilización de varias clases e
interfases. JDBC ofrece el paquete java.sql en la que existen clases e
interfaces muy útiles para trabajar con base de datos. Veamos las más
importantes clases o interfases y en la medida en que se desarrolle las
sesiones se detallarán más mencionando los métodos que tienen para
hacer fácil el acceso a la base de datos.
● La clase DriverManager , permite llevar a cabo una conexión con la
base de datos logrando cargar un driver. Existen varios métodos
para ello, entre las cuales se destacan:
public static d a t o s Connection getConnection(String url) throws SQLException
public static datos1 Connection getConnection(Strin url, String user, String password)
throws
El primero de los métodos recibe como parámetro la dirección URL
que identifica la base de datos. En el caso en que sea necesario
proporcionar un usuario y una contraseña para acceder a la base
de datos (como sucede en MySql) se utiliza el segundo de los
métodos. Una dirección URL JDBC proporciona un método de
localización de bases muy parecido al que representan las
direcciones URL que identifican sitios Web de Internet. Los
controladores JDBC tienen que ser capaces de conectar con la base de
datos a partir de la información contenida en la dirección URL JDBC
de la misma, por lo que son los desarrolladores los que fijan en la
mayoría de los casos la sintaxis.
● La interfaz Connection, cuando se utiliza uno de los métodos
anteriormente mencionados se obtiene un objeto de tipo Connection
que representa como es de esperar la conexión con la base de datos.
El objeto obtenido cuenta con varios métodos. Dos de los más
importantes son:
Unidad Didáctica: Taller de Programación Concurrente
Instituto de Educación Superior Tecnológico Público“Víctor Álvarez Huapaya”
public static Statement declaracion1 () throws SQLException
public void close() throws SQLException
El primero de los métodos sirve para crear un objeto del tipo Statement.
Las frases SQL se ejecutan normalmente mediante la utilización de
objetos del tipo Statement. Finalmente, es conveniente cerrar las
conexiones tan pronto como dejen de utilizarse para liberar recursos.
No obstante, ha de tenerse en cuenta que establecer una
conexión es una operación costosa, por lo que tampoco se debe
estar abriendo y cerrando la conexión con frecuencia.
● La interfaz Statement, los objetos de tipo Statement permiten
realizar consultas y efectuar operaciones de actualización, borrado o
inserción de datos. En algunos casos es interesante también fijar ciertos
parámetros vinculados con la consulta que se desea realizar, como por
ejemplo el tiempo que estamos dispuestos a esperar a que el gestor de la
base de datos devuelva el resultado de la consulta. Los métodos que
se citan a continuación son algunos de los más importantes para llevar a
cabo todas estas acciones.
public static ResultSet ejecutar(String sql) throws SQLException
Ejecuta una sentencia SELECT y devuelve el resultado mediante la interfaz ResultSet
public static int ejecutar1(String sql) throws SQLException
Ejecuta una sentencia UPDATE, DELETE, INSERT o cualquier otra sentencia
SQL que no devuelva un conjunto de registros, y devuelve el número
de registros afectados por la sentencia.
public static void setMaxRows(int max) throws SQLException
Establece el número máximo de registros que puede devolver executeQuery()
public static int getMaxRows() throws SQLException
Devuelve el número máximo de registros que puede devolver executeQuery()
public static void setQueryTimeout(int seconds) throws SQLException
Establece el tiempo en segundos que el controlador esperará hasta que el
sistema gestor de bases de datos devuelva un resultado
Unidad Didáctica: Taller de Programación Concurrente
Instituto de Educación Superior Tecnológico Público“Víctor Álvarez Huapaya”
public static int getQueryTimeout() throws SQLException
Devuelve el tiempo en segundos que el controlador esperará hasta que el
sistema gestor de bases de Datos devuelva un resultado
public static void close() throws SQLException
Libera los recursos asociados a la sentencia
● La interfaz ResultSet, el método executeQuery que se utiliza
para ejecutar sentencias SQL devuelve un objeto de tipo ResultSet. Éste
contiene las filas o registros obtenidos al ejecutar una sentencia SELECT.
Para recuperar los datos contamos con muchas opciones. Todos los
métodos funcionan de la misma manera. Toman como parámetro el
índice o el nombre del campo que se desea obtener y devuelven el dato
en cuestión.
public static String getString(int columnIndex) throws SQLException
public static String getString(String columnName) throws SQLException
public static int getInt(int columnIndex) throws SQLException
public static int getInt(String columnName) throws SQLException
Además, existen otros métodos gracias a los cuales es posible
recorrer los resultados guardados en el objeto de tipo ResultSet.
public static int findColumn(String columnName) throws
SQLException Devuelve el número de columna cuyo nombre se pasa
como parámetro public static boolean next() throws SQLException
Un objeto de tipo ResultSet puede contener más de un
resultado. Para ir avanzando por la lista de resultados utilizamos este
método, que devuelve un valor indicando si existe otro resultado o no.
public static boolean wasNull() throws SQLException
Indica si el contenido de la última columna accedida es NULL SQL
public static void close() throws SQLException
Libera los recursos asociados al ResultSet
UNOS DETALLES PARA RELACIONARSE CON LA BASE DE DATOS
Unidad Didáctica: Taller de Programación Concurrente
Instituto de Educación Superior Tecnológico Público“Víctor Álvarez Huapaya”
Como tenemos establecer conexión usaremos un objeto Connection (conn), para hacer una operación de consulta usaremos un objeto Statement (st) y para almacenar los resultados de la consulta usaremos un objeto ResultSet (rs).
Posteriormente preparamos variables para indicar el nombre de la base de datos, el login, el password y el url
Objeto de control JTable
La presentación de datos tabulados es una de las tareas más
comunes que se presentan al momento de crear interfaces gráficas;
desde la simple tabla que permite únicamente mostrar el resultado
de una consulta, hasta las que permiten editar directamente el
contenido de cada celda, ordenar las columnas, personalizar su
apariencia, etc. Todas las tareas antes descritas, y muchas otras,
son posibles de realizar utilizando la clase JTable; por supuesto,
mientras más complejo sea el requerimiento a cubrir, se requerirá en
igual medida utilizar más métodos o recursos de la clase.
El objeto Jtable como los modelos de la tabla representados a través de la interfaz
TableModel, pertenecen al paquete javax.swing.
El siguiente gráfico intenta mostrar como cada componente JTable
obtiene siempre sus datos desde un modelo de tabla.
El TableModel se implementa a partir de la clase
AbstractTableModel, aunque existe un modelo de tabla
predeterminado denominado la clase DefaiultTableModel. Las
propiedad más usada es model que permite definir el numero
de filas y columnas, siendo los métodos más usados: setModel(),
Unidad Didáctica: Taller de Programación Concurrente
Instituto de Educación Superior Tecnológico Público“Víctor Álvarez Huapaya”
que permite vincular un modelo al obejto Jtable y getRowCount(),
devuelve el número de filas en la tabla. Para la clase
DefaultTableModel los métodos más utilizados son: AddRow(),
añade una fila al final del modelo, getRowCount() devuelve el
número de filas de la tabla de datos, getValueAt() devuelve el
dato ubicado en la posición fila y columna y removeRow() elimina
una fila del modelo según posición indicada.
Mantenimiento de Datos usando JTable como vista de datos
Un mantenimiento de datos consiste en grabar datos en una tabla, eliminar datos correspondiente a un registro de datos como también modificar datos ya almacenados. Pero para eliminar datos o modificar datos se supone que los datos ya existen en la tabla de datos entonces se procedera hacer búsquedas sencillas para lograr su ubicación y proceder a su eliminación o modificación de datos. En esta sesión haremos uso del reciente explicado objeto JTable para visualizar los datos contenidos en una tabla.
Estando dentro de la clase Main establecemos las variables conn
del tipo Connection, st del tipo Statement y rs del tipo ResultSet ya
descritos y esplicados en las sesiones anteriores. También
definimos las varibales bd, login, password y url.
A continuación creamos el primer método estático denominado
Enlace que devolverá un objeto del tipo Connection. Este método
nos ayudará establecer la conexión con la base de datos
campeonatouefa. Seguimos a continuación agregando más
métodos a la clase Main.
Unidad Didáctica: Taller de Programación Concurrente
Instituto de Educación Superior Tecnológico Público“Víctor Álvarez Huapaya”
Se crea el método sta que devolverá un objeto del tipo
Statement. Básicamente permite crear el objeto del tipo
Statement a partir del objeto connection a través del método
createStatement(). Finalmente se necesita tener un
método denominado EnlEst que permitirá enlazarnos con la
tabla de Estadio aplicando el método executeQuery()
estableciendo a través del comando select a todos los campos de la
tabla de Estadio solo aquellos cuyo estado es igual a 1, es decir,
los estadios que están habilitados para su uso.
Si observamos en cada uno de los métodos se esta usando throws
SQLException, esto quiere decir que los métodos usan excepciones
(intercepcion de errores) para los erroes que se pueden presentar
durante la conexión y acceso de datos.
Import java.sql.*;
Import java.swing.*;
Import java.swing.table*;
Importamos los paquetes java.sql (para acceder a base de
datos), javax.swing (para el uso de los controles visuales),
javax.swing.table para el manejo de las clases del paquete table
Unidad Didáctica: Taller de Programación Concurrente
Instituto de Educación Superior Tecnológico Público“Víctor Álvarez Huapaya”
Para estableciendo como variables o atribnbutos conn, st y rs. Como
se está utilizando un objeto JTable se define la variable dtm del tipo
DefaulTableModel. En el método constructor hacemos uso del método
activabotones (programación que veremos luego), se establece un
vector o arreglo del tipo String donde se coloca los títulos que serán
de cada una de las columnas del objeto JTable. A partir del método
setColumnIdentifiers indicamos los datos del vector titulos al objeto
dtm y con el método setModel vinculamos el objeto dtm al objeto
JTable denominado tablaEstadio. Los métodos setSize y setLocation
es para establecer el tamaño y la localización del formulario en la
pantalla del computador.
El método activaBotones es para habilitar o inhabilitar el uso de los
botones de comando, esto dependerá en que circunstancias nos
encontremos en la ejecución de la aplicación de mantenimiento del
formulario. Con el método limpiarDatos se limpia los cuadros de
textos.
Unidad Didáctica: Taller de Programación Concurrente
Instituto de Educación Superior Tecnológico Público“Víctor Álvarez Huapaya”
En el botón de comando btnBuscar si está habilitado después de dar
clic en dicho botón, se procederá a la conexión con la base de datos,
luego en la variable rs se almacenará los datos provenientes de la
tabla de Estadio. En la variable b se coloca el valor ingresado en el
cuadro de texto txtCodEst. Se define una variable booleana
encuentra para manejar la situación de éxito o fracaso de la
búsqueda. En la sentencia while utilizamos el método next que
pertenece al objeto rs, es decir, es un método de la interfaz
ResulSet. El método next devuelve verdadero si encuentra la
primera fila de información, las siguientes veces se desplaza en
cada registro almacenado en el rs. La sentencia if que se encuentra
dentro del while, su condición lógica se hará verdadero cuando
encuentre el código de estadio buscado, haciendo que los cuadros
Unidad Didáctica: Taller de Programación Concurrente
Instituto de Educación Superior Tecnológico Público“Víctor Álvarez Huapaya”
de textos se muestren los demás datos, es entonces que la variable
encuentra recién se hace verdadero.
El botón de comando btnVer, consiste en aumentar el tamaño del
formulario para visualizar el objeto JTable. Posteriormente se
establece la conexión con la base de datos y en la variable
rs se almacena los datos provenientes de la tabla de Estadio.
Se define un vector denominado datos de tamaño 5 elementos del
tipo String que servirá colocar los datos de una fila para luego
agregarlo al objeto dtm que está vinculado al objeto JTable llamado
tablaEstadio. Pero antes de agregarlo debemos asegurarnos que
no exista fila alguna de datos en el modelo dtm y por ende en la
tablaEstadio. El bucle de la sentencia while permite colocar
en cada elemento del arreglo los datos extraidos de una fila que
almacena el objeto rs, esto es posible ya que el método
getString, indicando la posición de la columna, podemos obtener el
dato de la fila actual.
Unidad Didáctica: Taller de Programación Concurrente
Instituto de Educación Superior Tecnológico Público“Víctor Álvarez Huapaya”
Con el método addRow logramos crear una fila con los datos
del vector datos en el objeto dtm y como está vinculado a la
tablaEstadio entonces se podrá ver los registros agregados.
Para el botón de comando btnNuevo, limpiamos los cuadros de
textos con el método limpiarObjetos. Se inhabilita el cuadro de
texto txtCodEst y se envía el cursor al cuadro de texto
txtNom. Se inhabilta los botones de comando a excepción de
grabar ya que estamos en el momento de ingresar nuevos
datos y proceder a almacenar.
Unidad Didáctica: Taller de Programación Concurrente
Instituto de Educación Superior Tecnológico Público“Víctor Álvarez Huapaya”
En el botón de comando btnGrabar se inicia visualizando un
mensaje de confirmación para proceder a grabar, esto se logra
usando el método showConfirmDialog de la clase JoptionPane.
Si la respuesta es Sí entonces la sentencia if su condición lógica se
hará verdadera y por lo tanto establecemos conexión con la base
de datos campeonato, pasamos los datos ingresados a variables
como nom, sede y pais. En la variable comando establecemos la
instrucción con el comando INSERT para luego usar el método
executeUpdate quien procederá a grabar los datos.
Posteriormente se procede a cerrar la conexión con el método
close del objeto connection conn.
En el botón de comando btnEliminar, también se procede a través
de un mensaje confirmar si procede la eliminación de los datos del
Estadio. Si la respuesta es afirmativa se procede a conectarse a la
base de datos y en la variable de memoria cod se almacenada el
código del estadio ingresado a travñes del cuadro de texto
txtCodEst. Se construye la instrucción usando el comando UPDATE,
luego ejecutamos la eliminación lógica haciendo que el campo
estado sea igual a cero y se cierra la conexión con la base de
datos.
Unidad Didáctica: Taller de Programación Concurrente
Instituto de Educación Superior Tecnológico Público“Víctor Álvarez Huapaya”
el botón de comando btnModificar, al igual que de grabar o
eliminar se procede a confirmar a través de un mensaje si se
procede a la modificación de datos. Una vez salvados los datos
ingresados en los cuadros de textos en variables de memoria
se prepara la instrucción en la variable de memoria comando.
Usamos el comando UPDATE para actualizar los datos. Se procede
a ejecutar el comando con el método executeUpdate y se cierra
la conexión con el método close.
Unidad Didáctica: Taller de Programación Concurrente