Por:Luis Guaman
Conexin Directa.-
A la derecha,
el controlador JDBC accede directamente al controlador del fabricante (DB Client Lib); este tipo de controladores JDBC se denominan de nivel 3 4. Entre los manejadores de base de datos que poseen una conexin directa con Java, tenemos a: My Sql, Sybase DB2, Oracle. Ya que estas no necesitan un puente para comunicarse, el trabajo y la conexin son mucho ms rpidos que una conexin indirecta.
Conexin
Indirecta.-
la
izquierda el controlador JDBC hace de "puente" con el controlador ODBC, que es el que accede a la base de datos, este es un esquema de un controlador JDBC de nivel tipo 1. Entre los manejadores de base de datos que necesitan de un puente ODBC para conectarse con Java, tenemos a las marcas, Access, Microsoft SQL Server, Informix, entre otros.
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez.
Importante: Para realizar una conexin con alguna base de datos debemos de importar el paquete: java.sql.*.- Este paquete contiene clases e interfaces diseadas teniendo en mente la arquitectura tradicional cliente-servidor. Su funcionalidad se centra primordialmente en servicios de programacin bsicos de bases de datos, como creacin de conexiones, ejecucin de instrucciones e instrucciones preparadas. Dentro de los paquetes que ms usaremos en estar seccin se encuentran: java.sql.DriverManager.- Esta clase proporciona la funcionalidad necesaria para gestionar uno o mas drivers de base de datos. java.sql.ResultSetMetaData.- Esta interfaz proporciona mtodos para acceder a metadatos del Resultset, como los nombres de las columnas, sus tipos, el nombre de tabla correspondiente y otras propiedades. java.sql.SQLException.- Esta excepcin representa todas las condiciones de excepcin relacionadas con JDBC. java.sql.Connection.- representa una conexi6n con una base de datos.
en que los URL se utilizan en otras situaciones. Para poder entender la base lgica de los URL de JDBC, consideremos una aplicacin que utiliza diversas bases de datos; a cada base de datos se accede mediante diferentes driver, dependiendo del fabricador de base de datos. Los URL de JDBC proporcionan un modo de identificar un driver de base de datos, en el caso de una conexin directa. Un URL de JDBC representa un dirver y la informacin adicional especfica del driver para localizar una base de datos y conectarla a l. La sintaxis del URL de JDBC es como sigue:
jdbc:<subprotocolo>:<subname>
Se puede observar que estn separadas en tres partes por dos puntos. Protocolo: jdbc es el protocolo. Este es el nico protocolo permitido en JDBC. Sub-protocolo: el sub-protocolo es utilizado para identificar un driver de base de datos o el nombre de un mecanismo de conectividad de una base de datos, elegido por los proveedores del driver de base de datos. Subnombre: la sintaxis del subnombre es especfica de driver. Un driver puede elegir cualquier sintaxis apropiada para su implementacin. Por ejemplo en una conexin directa con DB2, y una base de datos de nombre libros, seria:
jdbc:db2j:libros
y para una conexin indirecta con Microsoft SQL Server utilizando un punte de datos JDBC-ODBC de nombre libros, nuestro URL seria:
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez.
jdbc:odbc:libros
DRIVER MANAGER.-
(gestor de driver) en JDBC es proporcionar una capa de acceso comn encima de diferentes drivers de base de datos utilizados en una aplicacin. En este enfoque las aplicaciones utilizan la clase DriverManager para obtener conexiones, a travs de su argumento URL. Por ejemplo para Ms SQL Server el driver seria:
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez.
Ahora si deseamos conectarnos con MySQL, el proceso es similar que el anterior hecho para Ms SQL Server, solo debemos de cambiar el contenido de Driver, URL, user, pass tal como se muestra:
String Driver = "com.mysql.jdbc.Driver"; String URL = "jdbc:mysql://localhost:3306/libros"; String user = "root"; String pass = "root"; la contrasea puede variar segn el usuario.
Esta parte observemos, la diferencia que hay con los parmetros antes puestos para establecer la conexin con Ms SQL Server. Como la conexin con MySQL con Java es directa, observamos que en la parte de URL, no hay ningn puente ODBC. Debemos de recordar que para cada manejador de base de datos de conexin directa existen drivers distintos, el cual debemos de instalar antes. Pero para las ultimas versiones del NetBeans y otros IDEs para java, estn contenidos dentro de la instalacin del Netbeans. los driver mas usados
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez.
Conexin
Servidor
Clases
Memoria
Pasos para la ejecutar una sentencia SQL con Java: 1. getConnection() 2. PreparedStatement 3. executeQuery() anterior. 4. ResultSet 5. next() memoria. : lleva a memoria los datos de una consulta SQL. : lee fila por fila los datos que estn en : primero obtenemos la conexin. : prepara un comando SQL. : ejecuta la instruccin SQL que se preparo en lo
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez. Opciones especficas del controlador que se van a utilizar para la conexin. Por ejemplo, un SQL Server origen de datos ODBC puede registrar las opciones de ISO que va a utilizar o si los controladores deben registrar estadsticas de rendimiento. Cada origen de datos ODBC de un cliente tiene un nombre del origen de datos (DSN) exclusivo. Un origen de datos ODBC para el controlador ODBC de SQL Server incluye toda la informacin utilizada para conectarse a una instancia de SQL Server, ms las opciones fundamentales.
A continuacin presento los pasos de configuracin del ODBC Puente de Datos: Paso1:
Inicio Ejecutar, entramos y a
escribimos
O la otra manera para ingresar al administrador de Orgenes ODBC, es ir al Panel de y Control Rendimiento Mantenimiento
Luego de aqu, daremos clic en Agregar, y nos aparecer la siguiente ventana, donde crearemos nuestro nuevo origen de datos, como en esta oportunidad trabajaremos con Microsoft SQL Server escogeremos en la parte final SQL Server:
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez.
Damos clic en Finalizar y nos saldr el siguiente asistente, en el cual contiene los siguientes campos a llenar: Se refiere al nombre de origen de datos que tendr nuestro
DNS(exclusivo) para conectarnos con Java en esta ocasin. Para este ejemplo ponemos en la casilla la palabra: notas Aqu se coloca una breve descripcin, sobre el origen de datos, por ejemplo: Puente de BDNotas. Si se desea se puede dejar en blanco. En esta parte colocaremos con que servidor nos estamos conectando a SQL Server, en general de conecta de forma local, si es este el caso hay varias formas, se puede poner en esta casilla un simple punto ., o tambin escribir la palabra (LOCAL), entre parntesis, o la otra forma es colocar el nombre de la maquina.
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez.
El nombre es muy importante recordarlo por que este es el nombre del Puente JDBC-ODBC que pondremos en la URL de la Clase Conexin, similar a la que aparece en la pagina 3, con el nombre libros. Damos clic en Siguiente y nos saldr lo siguiente: En el cual activaremos el radio botn donde dice: Con la autentificacin de SQL Server, al hacer esto se activara las dos casillas de la parte inferior de la ventana. Donde pondremos un Id de Inicio y un pass, esto dependiendo de cmo hemos ingresado al Analizador de consulta de SQL Server. Es muy probable que hayamos ingresado con el Id de Inicio sa (Server Authentication), y el pass en blanco. Tal como se muestra:
Antes de darle Siguiente, debemos de asegurarnos de que la base de datos a la que queremos crearle el puente JDBC-ODBC, ha sido ejecutada desde el analizador de
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez. consultas de Ms SQL Server, por decir. Si este paso ya ha sido tomado en cuenta podemos proseguir.
Aqu se escoge la base de datos con que trabajaremos, para efectos del prximo ejemplo escogemos la base de datos bdnotas, luego damos clic en Siguiente Finalizar Aceptar Aceptar y listo.
Observacin: Podemos comprobar que todo salio correctamente, en la creacin del origen de datos ODBC, cuando en la primera ventana mostrada en la pgina 5 aparezca algo similar a esto:
- Debemos de tener en claro el concepto de programacin orientada a objetos, en paginas anteriores se resumi la teora expuesta sobre conexiones, de Java con Ms Sql Server, en una sola clase, esto lo hacemos porque mas adelante no necesitare crear la clase Conexin para cada proceso que se realice con Java, sino que a esta clase la volvemos reutilizables en varias partes del cdigo. Para efectos de un mayor entendimiento propongo un ejemplo:
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez.
ALUMNO IDALUMNO APEALUMNO NOMALUMNO IDESP PROCE CURSO IDCURSO CREDITO : Cdigo del curso. NOMCURSO : Nombre del curso. : Crditos del curso. : Cdigo de alumno : Apellido del Alumno : Nombre del Alumno : Cdigo de especialidad : Procedencia
IDALUMNO
IDESP
IDCURSO
ESPECIALIDAD IDESP NOMESP COSTO NOTAS IDALUMNO : Cdigo de alumno IDCURSO EXAFINAL PAGOS IDALUMNO : Cdigo de alumno CICLO NCUOTA MONTO FECHA : Ciclo : Numero de cuota. : monto a pagar : fecha del pago : Cdigo del curso. : Examen final EXAPARCIAL : Examen Parcial. : Cdigo de especialidad : Nombre de la especialidad. : Costo de la especialidad.
Se pide que al ingresar por teclado el cdigo de un alumno, este muestre los siguientes detalles: Idalumno, nomAlumno, Apealumno, nomCurso, exaParcial, exaFinal, Promedio, Observacin (aprobado/desaprobado).
10
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez.
Solucin:
Paso 1: Ingresaremos al Netbeans, creamos un nuevo Proyecto JavaAplication, le
ponemos un nombre, y dentro de este proyecto crearemos 2 paquetes (Java Package), el primer paquete de nombre Clases, contendr todas las clases necesarias para implementar este programa; el segundo paquete de nombre Formulario, contendr el diseo de nuestro formulario haciendo uso de objetos. Dentro del paquete Clases, crearemos las siguientes clases:
Observacin: Cuando trabajemos con base de datos debemos de considerar, el tipo de datos que tienen sus atributos, si son varchar, char String - int int , float, numeric(8,2), real double, esto para saber que tipo de dato pondremos al declarar los atributos en java.
Los campos que utilizaremos en este ejemplo tienen los tipos de datos siguientes: idAlumno apeAlumno nomAlumno nomCurso exaParcial exaFinal char (5) varchar (30) varchar (30) varchar (35) real real SQL String String String String double int double int JAVA
Hacemos doble clic sobre la clase Alumnos.java el cual nos saldr la ventana para editar el cdigo, procedemos al llenado de la clase:
11
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez.
Clase Alumnos: aqu hemos establecidos los atributos y mtodos a utilizar en esta aplicacin:
Para completar esta parte de la clase Alumno.java, necesitamos crear sus mtodos accesores Set y Get, para esto nos ubicamos en cualquier parte del cdigo, damos clic derecho buscamos Refactor Encapsulate fields, y nos saldr la ventana en donde seleccionaremos todo Select All, luego damos Refactor.
12
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez. quedando el cdigo de la clase Alumno.java, como sigue:
Se aprecia que se han creado los mtodos set y get, para cada atributo de la clase. Se recomienda no copiar, el cdigo tal como se muestra en la figura, ya que por razones de espacio, se estn omitiendo algunos mtodos accesores y llaves de cierre, lo recomendable es hacerlo, con las sugerencias que expongo lneas arriba. Con esta parte terminamos todo lo que contendr la clase Alumnos.java
13
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez.
Debemos de tener presente el Nombre de origen de datos, para nuestra aplicacin, recordando lo que se hizo en el tema de Configuracin del Origen de Datos ODBC. Segn esto sabemos que hemos creado nuestro origen de datos con el nombre notas el cual se hizo en la pgina 6 de este texto, se debe hacer toda esta configuracin, porque como estamos trabajando con Ms Sql Server, este requiere un puente de datos, para la comunicacin con Java.
14
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez. Clase Proceso: Primero creamos un mtodo del tipo List<Alumnos>, que ser un lista de la clase Alumnos, el cual recibir como parmetro el cdigo de un alumno, luego este cdigo se asociara con el ? que se encuentra en la sentencia sql, se aprecia que la sentencia se encuentra agrupada en varias cadenas + +, esto por falta de espacio, pero tambin se puede escribir toda esta sentencia en una sola lnea.
Luego dentro de un bloque try catch se prepara la sentencia sql con la clase PreparedStatement. En la parte donde dice: st.setString(1, cod_alumno); - esto se refiere al parmetro que se recibiendo en el mtodo, el numero 1 significa la posicin del ? de la sentencia sql. cod_alumno, es la variable que recibe un valor, el cual se asignara en el ?. Por decir: cod_alumno=A0003, entonces este valor de A0003 se reemplazara por ? que se encuentra en la sentencia sql. Quedando idalumno=A0003 para el sql.
15
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez. En la parte de ResultSet rs=st.escuteQuery();esto nos quiere decir que cuando ejecutemos una consulta st.escuteQuery(), esta sea llevada a memoria a travs de ResulSet y se almacenara en rs. Luego en el While(rs.next()), estamos recorriendo todo lo que esta memoria, pero por el uso del next(), estamos recorriendo o leyendo fila por fila. Alumnos a=new Alumnos(); a.setCodigo(rs.getString(1)); a.setApellido(rs.getString(2)); a.setNombre(rs.getString(3)); a.setCurso(rs.getString(4)); a.setExaParcial(rs.getInt(5)); a.setExaFinal(rs.getInt(6)); lista.add(a); Lo que se hace en esta parte es crear un objeto de la clase Alumnos, para llamar a sus mtodos, cuando hacemos por ejemplo en a.setCodigo(rs.getString(1)); el mtodo rs.getString(1), captura el valor que tiene la memoria en la posicin 1 de la sentencia sql (idalumno). Para luego almacenar estos valores en a.setCodigo. Es decir: observemos que en la consulta sql, las posiciones de los campos, son los siguientes: Campos Idalumno ApeAlumno NomAlumno NomCurso ExaParcial ExaFinal lista. Posiciones 1 2 3 4 5 6 Tipo de datos String String String String int int Mtodo Java getString() getString() getString() getString() getInt() getInt()
Luego por ultimo se agrega todo esta a la lista con lista.add(a);. Y se retorna la
16
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez. Le ponemos de nombre Formulario, luego aparecer esta ventana vaca.
Dentro de esta ventana arrastraremos lo componentes Label, TextField, Table, Button, que estn en la paleta de java.
En el campo TextField, vamos asignarle el nombre de variable tcod, esto se hace dando clic derecho sobre la caga y seleccionando Change Variable Name, luego saldr el siguiente cuadrito, en donde pondremos:
Para el botn, solo le hemos cambiado el nombre con Edit Text Buscar , y el nombre de variable , le puse BuscarXCodigo. Similar a lo que se hizo con la cajita Text Field.
Similarmente debemos de cambiar el nombre de variable de la tabla, para este ejemplo cambimoslo por tabla1. Para ello damos clic derecho en la tabla y escogemos Change Variables Name
17
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez.
Paso 6: Ahora procedemos a crear un evento, para que genere la accin, esto se
hace posicionndose sobre el botn Buscar, clic derecho, tal como se muestra:
Dentro del mtodo del botn necesitamos, que al hacer clic en el botn, este obtenga el valor de la cajita Text Fields, para luego pasarlo al mtodo de la clase proceso: private void BuscarXCodigoActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: }
18
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez. La codificacin completa para el formulario de este programa se muestra a continuacin:
Se puede observar que hemos creado objetos de la clase DefaultTableModel y Proceso (importando sus libreras). Luego dentro del constructor por defecto de la Clase Formulario, estamos agregando las columnas con sus respectivos nombres que deseamos apreciar en la tabla. Recordemos que la variable tabla1 es el que asignamos a la tabla.
19
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez. En el mtodo BuscarXCodigo, estamos capturando el cdigo ingresado por teclado con: String cod=tcod.getText(); Luego dt.setRowCount(0); - se utiliza esto para limpiar la tabla cada vez que hagamos un listado nuevo. Luego estamos utilizando un for del tipo iterativo, Este for que pertenece a la clase Alumnos, recorrer el listado de la clase proceso al recibir un cdigo por teclado. Por ultimo dentro del for, agregaremos el contenido de las filas dentro de un Objeto[] el cual no tiene una longitud limite de datos, esto se hace con: dt.addRow(new Object[]{x.getCodigo(),x.getApellido(),x.getCurso(), x.getExaParcial(),x.getExaFinal(),x.Promedio(),x.Observacion()}); si observamos estamos agregando los datos en cada filas de la columnas que hemos creado en el mtodo constructor por defecto de la clase Formulario. Al Ejecutar esta aplicacin, dando en RUN sobre la clase Formulario se obtiene el siguiente resultado:
Recordemos: que para este problema hemos utilizado, como manejador de base de datos a Ms Sql Server, para el cual hemos hecho la conexin en este ejemplo. En la siguientes paginas planteo, el mismo problema pero ahora trabajando con My Sql, o su parte Visual de MySQL Front. Lo que debemos de considerar que el trabajo con My sql es mas rpido que el trabajo con Ms Sql Server. Por lo antes ya expuesto sobre conexin directa e indirecta.
20
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez.
Paso 1: Una vez abierta la sesin con MySQL Front, (para cualquier duda sobre el
inicio de sesin con My sql Front consulte el documento sobre instalacin de my sql & My sql front 5.1). Tal como se muestra:
En esta ventana, buscamos en la primera columna donde dice localhost la seleccionamos, luego nos dirigimos en la barra de herramientas del programa, damos clic en Base de Datos nueva base de datos, tal como se muestra:
Luego el sistema mostrara la siguiente ventana: Le ponemos el nombre a nuestra base de datos bdnotas, tal como se muestra: Aceptar. Siempre debemos de considerar que para migrar de una base de datos a otra, la base de datos destino, debe de estar vaca. Es por eso que en este caso nuestra base de datos destino ser la de MySQL , por tal razn estamos creando esta base de datos nueva.
21
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez.
Ahora estamos listos para importar los datos de Ms Sql Server a My Sql, a travs del puente de datos que creamos anteriormente, entonces hacemos lo siguientes, seleccionamos la base de datos que acabamos de crear bdnotas, clic derecho importar Tabla ODBC, tal como se muestra:
Luego saldr la siguiente ventana, que contiene los nombres de todos los puentes de datos que se encuentran en la maquina, para nuestro ejemplo seleccionamos el puente de datos notas, con el cual estuvimos trabajando para la conexin con Ms sql Server.
22
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez.
Damos clic en aceptar y saldr las tablas, que contiene ese puente de datos, seleccionamos todas y le damos clic en Adelante >.
Luego damos Adelante, hasta llegar al final de esta peticin luego, apreciaremos que se importaran las tablas a nuestra nueva base de datos bdnotas:
23
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez.
Paso 4: Despus de que haya terminado de importar las tablas, cerramos esta
ventana y observaremos que ya se han generado las tablas en nuestra nueva base de datos,
Para asegurarnos que la importacin sali correctamente podemos ejecutar alguna consulta con el Editor de SQL, dentro de esta seccin podemos escribir todas las consultas que queramos, por ejemplo:
Esto seria todo hasta el respecto de la importacin de Ms Sql Server hacia My Sql.
String Driver = "com.mysql.jdbc.Driver"; String URL = "jdbc:mysql://localhost:3306/bdnotas"; String user = "root"; String pass = " ";
Considerando esto, modifiquemos el contenido de los atributos Driver,URL,user,pass, tal como se muestra en lo anterior, una vez realizados los cambios, el cdigo de la clase Conexin.java, quedara como sigue:
24
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez.
Luego antes de correr, el programa es necesario aadir la librera de MySQL a nuestro proyecto, para ello nos dirigimos a la tasita de nuestro proyecto clic derecho sobre ella: Propiedades, tal como se muestra:
25
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez. Luego nos saldr la siguiente ventana, en la cual escogeremos Librerias, posteriormente, agregaremos la librera de MySQL con el botn AddLibrary. Tal como se muestra:
Al dar clic sobre AddLibrary , aparecer una nueva ventana en donde escogeremos lo siguiente:
Luego OK a esta ventana, y ahora si podemos correr nuestra aplicacin con las modificaciones hechas:
26
Conectividad de Bases de Datos con Java. Por: Aleksandr Pal Quito Prez. Lo importante aqu es observar que el tiempo de respuesta del trabajar con MySQL, es mucho ms rpido, que el de Microsoft Ms Sql Server.
Por: Aleksandr Pal Quito Prez Estudiante de Ingeniera de Sistemas Universidad Tecnolgica del Per Marzo - 2009
27