martes, 15 de marzo de 2011

Extra: Tutorial - Conexión a la Base de Datos

Hola que tal, en este post explicaré como realicé la conexión a base de datos en Java, usando MySql, con JDBC.
Nota: Esto es en Ubuntu, desconozco como se hace en Windows, pero tengo entendido que es similar.

Para empezar, pensando que ya tienen el JDK, y todo listo para programar, es necesario descargar un driver para poder realizar esta conexión. El driver se llama Connector/J y pueden descargarlo en la siguiente página:


Para descargarlo es necesario estar registrado en MySQL. Dependiendo si planean hacerlo en Windows o en Ubuntu, se puede descargar en tar.gzz o en zip.

Ya descargado podemos descomprimirlo en donde deseemos, yo por ejemplo lo descomprimí en la carpeta /home/emmanuel para acceder a él más facilmente.
Descomprimido, se debe obtener una carpeta con el siguiente nombre: mysql-connector-java-5.1.15
(la versión puede cambiar). Dentro de ella encontraremos algunos archivos como el readme, y la documentación. Si desean pueden leerla para entender un poco más como conectar la base de datos y ejemplos, pero esta en inglés.

El archivo que nos importa es: mysql-connector-java-5.1.15-bin.jar. Este archivo debemos moverlo a la dirección siguiente: /usr/lib/jvm/java-6-openjdk/jre/lib/ext.

No recuerdo bien, pero me parece que para hacerlo es necesario autentificarse como root. Podemos hacer esto facilmente desde la terminal con el siguiente comando:

Nota: Si se tiene definido un password, cuando lo pida como se ve en el segundo renglon, ingresenlo aunque no aparezca, y luego den enter.

Hecho esto estaremos autentificados como root y podemos mover archivos sin problemas, ahora como en mi caso descomprimí la carpeta en /home/emmanuel, solo me muevo a la carpeta mysql-connector-java-5.1.15.

Solo faltaría usar el comando mv para mover el archivo mysql-connector-java-5.1.15-bin.jar a la carpeta /usr/lib/jvm/java-6-openjdk/jre/lib/ext.

Para esto hacemos lo siguiente:
                                                       (Click a la imágen para ampliar)

Con esto ya movimos el archivo e "instalamos el driver". Ahora para hacer pruebas y conectar a una base de datos. Necesitamos descargar dos herramientas:

-My SQL-Server: usado para correr un servidor en donde se alojara la base de datos, usando sockets y puertos.

-My SQL Admin y Query Browser (Opcional): El primero es para asegurarnos que se puede crear una conexión y el segundo para realizar querys en MySQL sin usar java. Estos no son necesario para la conexión en sí, pero es muy útil para realizar pruebas antes de codificarlas en nuestro proyecto, con el Query Browser podemos crear la base de datos con el nombre que deseemos, crear tablas, agregar etc, todo lo que se puede hacer en MySQL.

Para esto podemos descargarlos con los siguientes comandos:
sudo apt-get install mysql-admin 
sudo apt-get install mysql-server
sudo apt-get install mysql-client 
Instalado esto, corremos el mysql-admin nos aparecera una ventana como la siguiente:
En ella seleccionamos esto:
-Stored Conecction : Save this connection
-Server Hostname : localhost
-Port: 3306 (De preferencia dejar el que ya tiene)
-Username: root (Para tener acceso a todo)
-Password: -Su password-


Ya con todo listo le damos connect, y nos debe abrir una ventana con cierta información, y debe decir en la parte de arriba por el centro:
Server Status: Server is Running.




Y esto es todo para la conexión a la base de datos, con esto nuestros códigos de JDBC deben funcionar correctamente.

Si no funciona algo, puede ser algun problema con el driver, para esto en internet encontré dos códigos en java muy útiles para probar que el driver este instalado correctamente.

JDBCDriverInformation.java:
Prueba de conexión a la base de datos, devuelve información sobre el driver instalado si este fue instalado correctamente:
Nota: cambien el password y el número de puerto si lo cambiaron.

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.SQLException;

public class JDBCDriverInformation {
 static String userid="root", password = "su password";//cambien por su password
 static String url = "jdbc:mysql://localhost:3306/mysql";//cambien el puerto si lo modificaron 
 static Connection con = null;
 public static void main(String[] args) throws Exception {
     Connection con = getOracleJDBCConnection();
     if(con!= null){
        System.out.println("Got Connection.");
        DatabaseMetaData meta = con.getMetaData();
        System.out.println("Driver Name : "+meta.getDriverName());
        System.out.println("Driver Version : "+meta.getDriverVersion());

     }else{
      System.out.println("Could not Get Connection");
     }
 }

 public static Connection getOracleJDBCConnection(){

  try {
   Class.forName("com.mysql.jdbc.Driver"); 
  } catch(java.lang.ClassNotFoundException e) {
   System.err.print("ClassNotFoundException: ");
   System.err.println(e.getMessage());
  }

  try {
     con = DriverManager.getConnection(url, userid, password);
  } catch(SQLException ex) {
   System.err.println("SQLException: " + ex.getMessage());
  }

  return con;
 }

}

TestJDBCDriverInstallation_Oracle.java:
Prueba para saber si se puede conectar con el driver.

import javax.swing.JOptionPane;

 public class TestJDBCDriverInstallation_Oracle {

    public static void main(String[] args) {
    StringBuffer output  = new StringBuffer();
    output.append("Testing oracle driver installation \n");
    try {
     String className = "com.mysql.jdbc.Driver";
     Class driverObject = Class.forName(className);
     output.append("Driver : "+driverObject+"\n");
     output.append("Driver Installation Successful");
     JOptionPane.showMessageDialog(null, output);
      } catch (Exception e) {
       output  = new StringBuffer();
       output.append("Driver Installation FAILED\n");
       JOptionPane.showMessageDialog(null, output);
    System.out.println("Failed: Driver Error: " + e.getMessage());
    }
     }
 }

Ejecutando estas codificaciones, podemos saber si el driver esta correctamente instalado. Si ocurre un error, puede ser que se haya movido el archivo en una carpeta equivocada.

Y esto es todo, si funciono todo correctamente deben poder probar sus propios códigos, para Windows el procedimiento es similar, pero a diferencia de la carpeta /usr/lib..... la carpeta se encuentra en C://Program FIles/....jre/ext.

EHaciendo esto me funciono correctamente la conexión; usando códigos de ejemplo para crear bases de datos desde java, les dejo esta imágen donde se puede ver un ejemplo modificado de MySQL de los encontrados en W3Schools:


Esta tabla la obtuve usando los siguientes querys en el programa MySQL Query Browser:
CREATE DATABASE DB
USE DB
CREATE TABLE Persons
(
P_Id int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
INSERT INTO Persons
VALUES(4, 'Garcia','Emmanuel',Calle Falsa 123','Monterrey')
SELECT * FROM Persons

Referencias:
-http://www.w3schools.com/SQl/
-http://www.jdbc-tutorial.com/
-http://www.mysql.com/downloads/connector/j/

Y esto es todo, cualquier duda o sugerencia no duden en comentar. 
Saludos.

No hay comentarios:

Publicar un comentario