Conexion de Base de Datos Con Java
Conexion de Base de Datos Con Java
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.
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:
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:
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, los driver mas usados estn contenidos Netbeans. dentro de la instalacin del
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. 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:
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.
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 siguiente: en Siguiente y nos saldr lo
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. consultas de Ms SQL Server, por decir. Si este paso ya ha sido tomado en cuenta podemos proseguir.
Paso 2:
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:
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 a
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
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:
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
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. 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
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. 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. 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. 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
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. 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. 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
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 se muestra: nueva base de datos, tal como
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
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
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
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
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. 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. 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.
27