PGR3 Sesion3

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 20

UNASAM Ingeniería de Sistemas e Informática

SESIÓN3

I. EL PAQUETE SQL DE JAVA Y SUS CLASES


1. JDBC
Java Database Connectivity, forma parte de un conjunto de clases e interfaces que
permiten acceder genéricamente a Bases de Datos independientes del proveedor.
Permite ejecutar operaciones sobre ellas desde el lenguaje de programación Java,
independientemente del Sistema Operativo o de la Base de Datos, utilizando SQL.
Se presenta como una colección de interfaces Java y métodos de gestión de
manejadores de conexión hacia cada modelo específico de Base de Datos.
Está compuesta por un conjunto de clases que unifican el acceso a las bases de datos.
Gracias a JDBC, un programa Java puede acceder a cualquier base de datos sin
necesidad de modificar la aplicación. Sin embargo, para que esto sea posible es
necesario que el fabricante ofrezca un driver que cumpla la especificación JDBC.
Capa de software intermedia que traduce las llamadas JDBC a los APIs específicos
del vendedor, ofrece a los desarrolladores Java un modo de conectar con bases de
datos, pueden crear un cliente y conectarlo con una base de datos, ejecutar
instrucciones SQL y procesar su resultado.
2. Tipos de driver
a. Tipo 1: puente JDBC-ODBC
Traduce operaciones JDBC en llamadas a la API ODBC., estas son cursadas a la
base de datos mediante el driver ODBC apropiado. Esta arquitectura se muestra
en la siguiente figura:

El puente se implementa como el paquete sun.jdbc.odbc y contiene una biblioteca


nativa utilizada para acceder a ODBC.
Ventajas
• Son el primer contacto con un driver JDBC es un puente JDBC-ODBC,
porque es el driver que se distribuye como parte de Java, como el paquete
sun.jdbc.odbc.JdbcOdbcDriver.
PROGRAMACIÓN III Mag. Ing. Miguel Angel Silva Zapata
UNASAM Ingeniería de Sistemas e Informática

• Puede trabajar con gran cantidad de drivers ODBC. Los desarrolladores


utilizan ODBC para conectar con bases de datos en un entorno distinto de
Java.
• Útiles en compañías que ya tienen un driver ODBC instalado en las máquinas
clientes basadas en Windows que ejecutan aplicaciones de gestión. Son el
único modo de acceder a algunas bases de datos de escritorio, como MS
Access, dBase y Paradox.
• La ausencia de complejidad en la instalación y el acceso virtual a cualquier
base de datos, le convierte en una buena elección.
Desventajas
• Rendimiento: Por el número de capas y traducciones que tienen lugar, utilizar
el puente no es la opción más eficaz en términos de rendimiento.
• El usuario limitado por la funcionalidad del driver elegido, solo proporciona
acceso a características comunes a todas las bases de datos. No puede hacer
uso de las mejoras que cada fabricante introduce en sus productos,
especialmente en rendimiento y escalabilidad.
• La mayoría de los browsers no tienen soporte nativo del puente. Como el
puente es un componente opcional del Java 2 SDK Standard Edition, no se
ofrece con el navegador.
b. Tipo 2: Driver API nativo/parte java
Por ejemplo, el driver JDBC/OCI de Oracle, utilizan la interfaz de métodos
nativos de Java para convertir las solicitudes de API JDBC en llamadas específicas
a bases de datos para RDBMS como SQL Server, Informix, Oracle o Sybase.

Aunque habitualmente ofrecen mejor rendimiento que el puente JDBC-ODBC,


tiene los mismos problemas de despliegue en los que la interfaz de conectividad
nativa debe estar instalada en la máquina cliente. El driver JDBC necesita una
biblioteca suministrada por el fabricante para traducir las funciones JDBC en

PROGRAMACIÓN III Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

lenguaje de consulta específico para ese servidor. Estos drivers están escritos en
Java y C/C++, el driver debe utilizar una capa de C para realizar llamadas a la
biblioteca escrita en C.
Ventajas
• Ofrece un rendimiento significativamente mayor que el puente JDBC-ODBC,
las llamadas JDBC no se convierten en llamadas ODBC, sino que son nativas.
Desventajas
• La biblioteca de la base de datos del fabricante necesita iniciarse en cada
máquina cliente. En consecuencia, los drivers de tipo 2 no se pueden utilizar
en Internet.
• Utiliza la interfaz nativa de Java, que no está implementada de forma
consistente entre los distintos fabricantes de JVM por lo que no es muy
portable entre plataformas.
c. Tipo 3: Driver protocolo de red/ todo java
Implementado en una aproximación de tres capas por lo que las solicitudes de la
DB al JDBC están traducidas en un protocolo de red independiente de esta y
dirigidas al servidor de capa intermedia. Recibe las solicitudes y las envía a la BD
utilizando un driver JDBC de tipo 1 o tipo 2 (lo que significa que se trata de una
arquitectura muy flexible).
La arquitectura en conjunto consiste en tres capas: la capa cliente JDBC y driver,
la capa intermedia y la base o las bases de datos a las que se accede.

El driver JDBC se ejecuta en el cliente e implementa la lógica para enviar a través


de la red comandos SQL al servidor JDBC, recibir las respuestas y manejar la
conexión.
El servidor intermedio puede implementarse como un componente nativo, o
escrito en Java. Las implementaciones nativas conectan con la BD utilizando una
biblioteca cliente del fabricante o un ODBC. El servidor tiene que configurarse
para la base o bases de datos a las que se va a acceder. Esto puede implicar
asignación de números de puerto, configuración de variables de entorno, o de
cualquier otro parámetro que necesite el servidor. Si el servidor intermedio está
PROGRAMACIÓN III Mag. Ing. Miguel Angel Silva Zapata
UNASAM Ingeniería de Sistemas e Informática

escrito en Java, puede utilizar cualquier driver en conformidad con JDBC para
comunicarse con el servidor de bases de datos mediante el protocolo propietario
del fabricante.
Ventajas
• Tiene un componente en el servidor intermedio, no necesita ninguna
biblioteca cliente del fabricante para presentarse en las máquinas clientes.
• Son los que mejor funcionan en Internet o Intranet, aplicaciones intensivas de
datos, en las que un gran número de operaciones concurrentes como
consultas, búsquedas, entre otras, son previsibles, escalables y su rendimiento
es su principal factor.
• El protocolo de red puede estar diseñado para hacer el driver JDBC cliente
muy pequeño y rápido de iniciar, lo que es perfecto para el despliegue de
aplicaciones de Internet.
• Ofrece soporte para características como almacenamiento en memoria caché
(conexiones, resultados de consultas, etc.), equilibrio de carga, y
administración avanzada de sistemas como el registro.
• Las aplicaciones web de bases de datos basadas en 3 capas implican
seguridad, firewalls y proxis y los drivers del tipo 3 ofrecen normalmente
estas características.
Desventajas
• Requieren código específico de bases de datos para realizarse en la capa
intermedia.
• Además, atravesar el conjunto de registros puede llevar mucho tiempo, ya que
los datos vienen a través del servidor de datos.
d. Tipo 4: Driver protocolo de nativo/ todo java
Se comunica directamente con el servidor de bases de datos utilizando el protocolo
nativo del servidor. Estos drivers pueden escribirse totalmente en Java, son
independientes de la plataforma y eliminan todo lo relacionado con la
configuración en el cliente. Sin embargo, es específico de un fabricante. Cuando
la base de datos necesita ser cambiada a un producto de otro fabricante, no se
puede utilizar el mismo driver. Hay que reemplazarlo y también el programa
cliente, o su asignación, para ser capaces de utilizar una cadena de conexión
distinta para iniciar el driver.

PROGRAMACIÓN III Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

Traducen JDBC directamente a protocolo nativo sin utilizar ODBC o la API


nativa, pueden proporcionar un alto rendimiento de acceso a bases de datos.

Ventajas
• Como no tienen que traducir las solicitudes de ODBC o de una interfaz de
conectividad nativa, o pasar la solicitud a otro servidor, el rendimiento es
bastante bueno.
• No hay necesidad de instalar ningún software especial en el cliente o en el
servidor; estos drivers pueden bajarse de la forma habitual.
Desventajas
• El usuario necesita un driver distinto para cada base de datos.
3. El paquete Sql
Implementado por la API (Interfaz de Programación de Aplicaciones) de JDBC, es
una paquetería importada por java para hacer consultas en una base de datos.
Contiene su propia estructura y hace llamado a sus propias clases
Proporciona la API para acceder y procesar datos almacenados en una fuente de datos
como una base de datos relacional, utilizando el lenguaje de programación Java,
incluye un marco para instalar diferentes controladores de forma dinámica y así
acceder a diferentes fuentes de datos.
Aunque está orientada principalmente a pasar sentencias SQL a una base de datos,
permite leer y escribir datos desde cualquier fuente de datos con formato tabular.
4. Operaciones con JDBC para la conexión

a. Cargar un driver de base de datos y abrir conexiones


La interfaz java.sql.Connection representa una conexión con una base de
datos. Es una interfaz porque la implementación de una conexión depende de la
red, del protocolo y del vendedor. El API JDBC utiliza la
clase java.sql.DriverManager adecuada para acceder a bases de datos desde
programas cliente escritos en Java.

PROGRAMACIÓN III Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

El estándar para obtener conexiones es registrar cada driver


con java.sql.DriverManager y utilizar sus métodos para obtener
conexiones. java.sql.DriverManager puede gestionar múltiples drivers.
Cada driver implementa la interfaz java.sql.Driver. Uno de los métodos de esta
interfaz, el método connect() permite establecer una conexión con la base de
datos y obtener un objeto Connection.
Los URL de JDBC
Los URL de JDBC proporcionan un modo de identificar un driver de base de
datos, representa un driver y la información necesaria para localizar una base de
datos y conectar a ella. Su sintaxis es la siguiente:
jdbc:<subprotocol>:<subname>
Existen tres partes separadas por dos puntos:
• Protocolo: En la sintaxis anterior, jdbc es el protocolo. Éste es el único
protocolo permitido en JDBC.
• Subprotocolo: Utilizado para identificar el driver que utiliza la API JDBC
para acceder al servidor de bases de datos. Este nombre depende de cada
fabricante.
• Subnombre: La sintaxis del subnombre es específica del driver.
Por ejemplo para una base de datos bdVentas en Mysql, tenemos
jdbc:mysql: bdVentas
En oracles seria
jdbc:odbc: bdVentas
Como se observa, los URL de JDBC son lo suficientemente flexibles como
para especificar información específica del driver en el subnombre.
Clase DriverManager
Proporciona una capa de acceso común encima de diferentes drivers de base de
datos utilizados en una aplicación. Las aplicaciones utilizan esta clase para
obtener conexiones. Esta clase ofrece tres métodos estáticos para obtener
conexiones.
Requiere que cada driver que necesite la aplicación sea registrado antes de su
uso, de modo que el DriverManager sepa que está ahí.
Con esta clase en una aplicación, podemos obtener una o más conexiones para
una o más bases de datos utilizando drivers JDBC.
El siguiente fragmento de código que carga el driver de base de datos de MySQL:

PROGRAMACIÓN III Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

try {
Class.forName(`”com.mysql.jdbc.Driver'');
} catch (ClassNotFoundException e) {
// Driver no encontrado
}
En tiempo de ejecución, el ClassLoader localiza y carga la clase
com.mysql.jdbc.Driver desde la ruta de clases utilizando el cargador de clase de
autoarranque.
En JDBC, se requiere que cada proveedor de driver registre una instancia del
driver con la clase java.sql.DriverManager durante esta inicialización estática.
Este registro tiene lugar automáticamente cuando el usuario carga la clase del
driver (utilizando la llamada Class.forName()).
Una vez que el driver se registra con java.sql.DriverManager, podemos utilizar
sus métodos estáticos para obtener conexiones. El gestor de drivers tiene tres
variantes del método estático getConnection() utilizado para establecer
conexiones.
El gestor de drivers delega estas llamadas en el método connect() de la interfaz
java.sql.Driver.
Dependiendo del tipo de Driver y del servidor de base de datos, la conexión puede
llevar una conexión física de red al servidor de BD o una conexión física de
proxy. Exista o no conexión física, el objeto conexión es el único para conectar
con la BD.
b. Establecer una conexión
Para comunicar con una base de datos con JDBC, debemos en primer lugar
establecer una conexión con la base de datos a través del driver JDBC apropiado.
El API JDBC especifica la conexión en la interfaz java.sql.Connection.
El siguiente código muestra un ejemplo de conexión JDBC a una base de datos
MySQL:
Connection connection;
String url = “jdbc:mysql:BDVentas”;
String login = “root”;
String password = “Miclave”
try {
connection=DriverManager.getConnection(url,login,password);
// Acceso a datos utilizando el objeto de conexión
...
} catch (SQLException sqle) {

PROGRAMACIÓN III Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

// Tratar el error aquí


} finally {
try {connection.close();
} catch (SQLException e) {
// Tratar el error aquí
}
}

En este ejemplo, la clase DriverManager intenta establecer una conexión con la


base de datos BDVentas utilizando el driver JDBC que proporciona MySQL.
Para poder acceder al RDBMS MySQL es necesario introducir un login y
un password válidos.
En el API JDBC, hay varios métodos que pueden lanzar la
excepción SQLException.
En este ejemplo, la conexión se cierra al final del bloque finally, de modo que
los recursos del sistema puedan ser liberados independientemente del éxito o
fracaso de cualquier operación de base de datos.
c. Crear y ejecutar instrucciones
Antes de poder ejecutar una sentencia SQL, es necesario obtener un objeto de
tipo Statement. Creado dicho objeto, podrá ser utilizado para ejecutar cualquier
operación contra la base de datos.
Statement
El siguiente método crea un objeto Statement, que podemos utilizar para enviar
instrucciones SQL a la base de datos. Statement createStatement() throws
SQLException
La finalidad de un objeto Statement es ejecutar una instrucción SQL que puede
o no devolver resultados. Para ello, la interfaz Statement dispone de los
siguientes métodos:
executeQuery(), para sentencias SQL que recuperen datos de un único
objeto ResultSet.
executeUpdate(), para realizar actualizaciones que no devuelvan un
ResultSet. Por ejemplo, sentencias DML SQL (Data Manipulation Language)
como INSERT, UPDATE y DELETE, o sentencias DDL SQL (Data Definition
Language) como CREATE TABLE, DROP TABLE y ALTER TABLE. El
valor que devuelve executeUpdate() es un entero (conocido como la cantidad de
actualizaciones) que indica el número de filas que se vieron afectadas.
PROGRAMACIÓN III Mag. Ing. Miguel Angel Silva Zapata
UNASAM Ingeniería de Sistemas e Informática

Resultset
Contiene todas las filas que satisfacen las condiciones de una sentencia SQL y
proporciona el acceso a los datos de estas filas mediante un conjunto de métodos
get que permiten el acceso a las diferentes columnas de las filas. El método next
se usa para moverse a la siguiente fila del ResultSet, convirtiendo a ésta en la
fila actual.
Es una tabla, pero no hay garantía de que los datos lleguen en orden, por lo que
se puede usar la sentencia ORDER BY para asignar un determinado orden
establecido en las filas del ResultSet.
El formato general de un ResultSet es una tabla con cabeceras de columna y los
valores correspondientes devueltos por la ‘query’. Por ejemplo, si la ‘query’ es
SELECT a, b, c FROM Table1, el resultado tendrá una forma semejante a :
a b c
-------- --------- --------
12345 Cupertino CA
83472 Redmond WA
83492 Boston MA

Para la implementación de aplicaciones en el lenguaje java, que visualicen, registren,


modifiquen y eliminen registros de una base de datos MySQL, debemos proceder de
la siguiente manera.

PROGRAMACIÓN III Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

5. Realizar la conexión de la base de datos


En este paso siguiendo el enfoque orientado a objetos construimos la clase Conexión,
utilizando el Driver JDBC y las clases e interfaces del paquete sql del lenguaje java
y con un archivo de configuración de las credenciales de acceso, como se muestra a
continuación.
a. Archivo de acceso

Fuente: Elaboración propia


b. Clase conexión

Fuente: Elaboración propia

PROGRAMACIÓN III Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

Fuente: Elaboración propia

Fuente: Elaboración propia

PROGRAMACIÓN III Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

Fuente: Elaboración propia

Fuente: Elaboración propia


c. Implementados los métodos para la visualización de registros en controles
como tablas.
Después de haber implementado la clase conexión con los métodos necesarios
para la conexión, creamos la clase controlador.

Fuente: Elaboración propia

PROGRAMACIÓN III Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

En el cual definimos el atributo Base que es una instancia de la clase conexión el


cual nos permite desde cualquier otra clase, tener la conexión con la base de datos
que se utiliza en la aplicación a construir, entre estos tenemos los siguientes:

Fuente: Elaboración propia


Este método LlenarCombo se implementa en la clase controlador y nos permite
llenar un jComboBox una columna del resultado de una consulta.

Fuente: Elaboración propia

Este método LlenarJTabla se implementa en la clase controlador y nos permite


llenar en un JTable una o más columnas del resultado de una consulta.

Fuente: Elaboración propia

Este método LimTabla se implementa en la clase controlador y nos permite limpiar


un modelo de tabla y por lo tanto de manera indirecta también un JTable.

PROGRAMACIÓN III Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

Fuente: Elaboración propia

Este método DevolverRegistroDto se implementa en la clase controlador y nos permite


limpiar retornar un dato en particular a partir de una consulta de selección que tiene
como resultado un registro.

Fuente: Elaboración propia

Este método ActualizarRegistro se implementa en la clase controlador y nos permite


crear, modificar o eliminar un registro de alguna tabla de la base de datos a la cual está
conectada la aplicación.

Fuente: Elaboración propia

Este método Verificarconsulta se implementa en la clase controlador y nos permite


saber si una consulta del tipo selección tiene éxito o no; es decir retorna o no registros.

PROGRAMACIÓN III Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

6. Realizar el diseño e implementación de las interfaces del sistema


En esta parte se trata de hacer el diseño de las interfaces gráficas de usuario y hacer
la programación de las funcionalidades de cada GUI.

El código que permite el diseño y funcionalidad de la interfaz anterior, en la cual se


crean, modifican, eliminan, buscan y reportan registros de la tabla facultad de la BD
bd_prueba es el siguiente.
Importación de paquetes y definición de atributos
Importamos todos los paquetes necesarios para el diseño y funcionalidad del
programa.

PROGRAMACIÓN III Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

Constructor de la clase implementada

En este método estamos invocado los métodos donde se configura la ventana,


dibujamos los controles del formulario (etiquetas, cajas de texto, tablas), hacemos
que los controles escuchen con el método oyentes y finalmente mostramos las
facultades en el JTable.

Método configurar ventana.


Encargado de diseñar la ventana o interfaz, titulo, color de fondo entre otros aspectos.

Método DibujarControles.
Encargado de diseñar dentro del formulario o ventana todos los controles que van a
permitir ingresar, mostrar e interactuar con la información de las facultades de la
tabla facultad de una BD.

PROGRAMACIÓN III Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

Método DibujarControles.
Encargado de diseñar mostrar y buscar las facultades en el JTable del formulario,
mediante una consulta tipo select que utiliza el operador like.

Método Crear
Encargado de crear un registro en la tabla Facultad, para esto primero se comprueba
que en la caja de texto exista información, si es así se verifica que la facultad a crear
no este registrada en la BD, esto se hace mediante el método VerificaConsulta al cual
se le pasa una consulta MySQL del tipo Select, que busca comprobar si la Facultad
que se esta ingresando aun no existe en la BD; si el resultado es negativo, entonces se

PROGRAMACIÓN III Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

procede a crear la nueva Facultad mediante el método ActualizarRegistro, pasándole


una consulta MySQL del tipo Insert, como se muestra a continuación.

Método Seleccionar
Encargado de mostrar los datos de la facultad en las cajas de texto del formulario y
guardar datos en una variable, cada vez que el usuario haga click, sobre alguno de los
registros del JTable que muestra las facultades.

Método Editar
Encargado de cambiar o modificar el nombre de una facultad, previamente se tiene
que seleccionar donde entra en acción el método seleccionar, cuando ya esta
seleccionado entonces se verifica que se tenga información en la caja de texto del
nombre de la marca, verificamos que no se repita la marca modificada, utilizando el
método VerificaConsulta de ser así se actualizan los cambios mediante el método
ActualizarRegistro al cual le pasamos como argumento una consulta Mysql de tipo
update, tal como se muestra a continuación.

PROGRAMACIÓN III Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

Método Eliminar
Encargado de eliminar un registro de la base de datos previamente seleccionada sobre
el JTable, donde entra en acción el método Seleccionar, se pide la confirmación para
proceder con la eliminación y si es positiva, entonces se procede con la eliminación
del registro esto se realiza mediante el método ActualizarRegistro al cual se le pasa
como argumento una consulta MySQL del tipo delete, tal como se muestra a
continuación.

Método Cancelar
Encargado de cancelar todo lo actuado por el usuario como haber ingresado algún dato
en las cajas de texto o seleccionado una de las facultades que se muestran como filas
en el JTable.

PROGRAMACIÓN III Mag. Ing. Miguel Angel Silva Zapata


UNASAM Ingeniería de Sistemas e Informática

Método Imprimir
Encargado de enviar a la impresora el reporte de las Facultades que están registradas
en la BD, para lo cual preguntamos si hay Facultades en el JTable, si es así entonces
se procede con la impresión usando el método Imprimircon1Parametros del objeto
impresor el cual estudiaremos posteriormente, el código se muestra a continuación.

Bibliografía
http://www.iuma.ulpgc.es/users/lhdez/inves/pfcs/memoria-ivan/node8.html
https://es.wikipedia.org/wiki/Result_Set
https://www.ibm.com/support/knowledgecenter/es/ssw_ibm_i_72/rzahh/jdbcrs.htm

PROGRAMACIÓN III Mag. Ing. Miguel Angel Silva Zapata

También podría gustarte