jueves, 15 de octubre de 2009

Conexión a Bases de Datos desde Java con JDBC

Primero que todo esto no es un tutorial paso a paso es una guía rápida, por lo tanto lo necesario para entender esta guía es tener conocimientos básicos de Java y de base de datos, comencemos:

Para comenzar con JDBC

Lo primero y más necesario es tener el driver de la base de datos a la cual se desea que un programa java acceda o se conecte, por ejemplo el driver para conectarse a una base de datos de MySQL es mysql-connector-java-5.0.5-bin.jar y se puede obtener fácilmente de la pagina oficial de MySQL, de forma similar se pueden obtener algunos de los drivers para otros motores de bases de datos.

Como segundo paso, es necesario que el driver de la base de datos sea accesible por el proyecto o programa, las 3 formas que conozco de hacerlo son.

  1. Colocar el driver en una carpeta en la cual se instalo el java, por defecto java se instala en C:\Archivos de Programa\Java\jdk1.5.0_05, si se ha instalado en otra dirección pues se debe buscar en donde se ha instalado Java; el driver lo deberemos colocar en esta carpeta: C:\Archivos de Programa\Java\jdk1.5.0_05\jre\lib\ext. Esta forma de instalar el driver es buena si se ha de desarrollar muchas aplicaciones que necesiten del driver.

  2. Colocar en la variable de sistema o entorno CLASSPATH la dirección en donde esta el driver de la base de datos, esta opción funciona para que los IDEs que utilizan esta variable reconozcan el driver. Por ejemplo si el driver lo tenemos en esta dirección C:\driverBD, podemos añadir la dirección del driver desde las propiedades de Mi PC nos vamos a la pestaña de Opciones avanzadas y cliqueamos en el botón Variables de entorno, buscamos la variable CLASSPATH, cliqueamos en el botón de Modificar y añadimos al final la dirección del driver sin borrar lo demás así: .;C:\driverBD\mysql-connector-java-5.0.5-bin.jar pero debemos tener permisos de administrador para realizar esta tarea.

    Otra forma es abrir una consola de sistema (CMD) y digitar lo siguiente: set CLASSPATH=.;C:\driverBD\mysql-connector-java-5.0.5-bin.jar.

  3. La última forma de adicionar el driver es desde un IDE como NetBeans o Eclipse desde las opciones de añadir librerías.

Clases y Métodos Basicos de JDBC


  • Class.forName: Registra el driver JDBC usando el cargador de clases, ej: Class.forName(“nombre_driver”).

  • DriverManager.getConnection: Para obtener una conexión con una base de datos dependiendo del driver JDBC registrado, retorna un objeto tipo Connection que abre la conexión con la BD especifica, Connection c = DriverManager.getConnection(“BD_url”, “usuario”, “pass”).

  • Crear sentencias SQL: para ejecutar sentencias SQL se necesita un objeto Statement, el cual debe ser inicializado con un método de un objeto tipo Connection.

    Connection connection = DriverManager.getConnection(“BD_url”, “usuario”, “pass”).
    Statement select = connection.createStatement();


  • Ejecutar sentencias SQL: se necesita un objeto Statement inicializado y llamar al método executeQuery(“sentencia select”), este método retorna un objeto ResultSet que es donde se almacena el conjunto de datos obtenidos de la consulta.

    Statement select = connection.createStatement();
    ResultSet nombres = select.executeQuery ("SELECT * FROM Tabla");


  • executeUpdate(String sql): método de la clase Statement para ejecutar sentencias SQL de actualización como INSERT, UPDATE o DELETE.

Conexión a una Base de Datos SQLite


Primero se debe tener el driver para conectarse a SQLite, este se puede descargar de http://www.zentus.com/sqlitejdbc/, después realizar los pasos descritos en la sección Para comenzar.

Ejemplo: Clase java que se conecta a SQLite y crea/abre un archivo de sqlite, realiza algunas inserciones y después ejecuta una sentencia select.

import java.sql.*;

public class SqliteJ {
     public static void main(String[] args) throws Exception {
           Class.forName("org.sqlite.JDBC");

           Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db");

           Statement stat = conn.createStatement();
           stat.executeUpdate("create table people (name, occupation);");
           stat.executeUpdate("insert into people values ('Gandhi', 'politics');");
           stat.executeUpdate("insert into people values ('Turing', 'computers');");
           stat.executeUpdate("insert into people values ('Wittgenstein', 'smartypants');");

           ResultSet rs = stat.executeQuery("select * from people;");

           while (rs.next()) {
              System.out.println("name = " + rs.getString("name"));
              System.out.println("occupation = " + rs.getString("occupation"));
           }

           rs.close();
           conn.close();
      }
}
Código 1 – Ejemplo Conexión de de una aplicación Java a una Base de Datos SQLite.

Conexión A una Base de Datos Microsoft Access


Para realizar una conexión con Access debemos tener en cuenta que podemos realizar la conexión atreves del ODBC que provee Windows para que las aplicaciones puedan conectarse independientemente del motor de base de datos (Oracle, Sql Server, etc). Podemos decir que Java se puede conectar a las Bases de datos de dos formas la primera vista anteriormente es utilizar únicamente el JDBC que es la Api general para la conexión a base de datos lo necesario para realizar esta conexión es tener el controlador JDBC del motor de base de datos al que se desea conectar como en el caso de la conexión a la Base de Datos Sqlite visto anteriormente.

La otra forma de realizar una conexión a una base de datos es utilizar un puente JDBC-ODBC que no es más que utilizar el ODBC que provee Windows (estándar para manejar BD en Windows) y enlazarlo con la API JDBC de java, cabe decir que el ODBC debe poseer el driver necesario para conectarse a una base de datos en especifico, por ejemplo el controlador para Access es Driver do Microsoft Access (*.mdb) que lo trae ya instalado SO Windows, esta forma de conexión se dice es un poco menos eficiente que utilizar solo la API JDBC ya que se debe realizar un enlace de más y además de esto se utiliza un controlador muy genérico y no optimizado para la base de datos con la que se desea conectar a diferencia de utilizar un controlador JDBC especializado para un motor de Base de Datos.

Para comenzar a realizar la conexión primero debemos configurar el ODBC, para esto abrimos el panel de control abrimos Herramientas Administrativas y luego abrimos Orígenes de Datos (ODBC), en la pestaña de DNS de usuario damos clic en Agregar seleccionamos el driver Driver do Microsoft Access (*.mdb) en el nuevo cuadro de dialogo colocamos un nombre para el origen de datos (para el ejemplo coloque de nombre odbcJavaAccess) y si quieren una descripción, después en la parte que dice Base de Datos seleccionamos el botón de seleccionar y buscamos el archivo o base de datos de Access al cual queremos enlazarnos (para el ejemplo es una sola tabla que contiene un campo nombre y otro campo teléfono).

Ahora el código que permite acceder a la base de datos.

import java.sql.*;

public class AccesJava {
     public static void main(String[] args) throws Exception {

     try{
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
     }
     catch(Exception e){
        System.out.println("No se ha podido cargar el Driver JDBC-ODBC");
     }

     Connection con = DriverManager.getConnection("jdbc:odbc:odbcJavaAccess");

     Statement stat = con.createStatement();

     ResultSet rs = stat.executeQuery("SELECT Nombre, Telefono FROM Persona");

     while (rs.next()) {
        System.out.println("Nombre = " + rs.getString("Nombre"));
        System.out.println("Telefono = " + rs.getString("Telefono"));
     }

     rs.close();
     con.close();
   }
}
Código 2 – Ejemplo Conexión de de una aplicación Java a una Base de Datos Access.

Conexión a una Base de Datos SQL Server 2005


Para realizar una conexión a SQL Server lo podemos hacer ya por la conexión JDBC-ODBC como se realizo anteriormente para Access, o descargar de la pagina de Microsoft el JDBC para SQL 2005, en este caso se utilizara SQL Express 2005, y el driver sqljdbc_2.0.1803.100_esn.exe que se puede obtener fácilmente de la pagina de Microsoft.

Como primer ejemplo se realiza una conexión por medio de JDBC-ODBC, Para comenzar a realizar la conexión primero debemos configurar el ODBC, para esto abrimos el panel de control abrimos Herramientas Administrativas y luego abrimos Orígenes de Datos (ODBC), en la pestaña de DNS de usuario damos clic en Agregar seleccionamos el driver SQL Native Client en el nuevo cuadro de dialogo colocamos un nombre para el origen de datos (para el ejemplo coloque de nombre jdbcodbcSQLServer) y si quieren una descripción, después en la parte que pregunta con que servidor desea conectarse colocamos el nombre del servidor de SQL Express, que por defecto es SQLEXPRESS, luego damos clic en el botón siguiente, seleccionamos el modo de conexión ya sea por medio del sistema operativo o por cuenta de usuario desde el SQL en este caso se selecciono el modo con autentificación de SQL Server, y en los campos de abajo colocamos el login y password para realizar la conexión luego damos clic en el botón siguiente, ahora podemos seleccionar una Base de Datos predeterminada con la que queremos conectarnos directamente y hasta seleccionar o escribir un servidor espejo, damos siguiente, y luego aparecen otras configuraciones pero por el momento lo dejamos así y para terminar damos clic en el botón finalizar, nos sale un cuadro con el resumen de la configuración y un botón para que realicemos una prueba de la conexión, con esto ya podemos conectarnos desde una aplicación java a SQL Express por medio de JDBC-ODBC.

import java.sql.*;

public class SQLExpressOdbc {
     public static void main(String[] args) throws Exception {

     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

     Connection con = DriverManager.getConnection("jdbc:odbc:odbcSQLCliente", "login",                    "password");

      Statement stat = con.createStatement();

      ResultSet rs = stat.executeQuery("select usr_login, usr_nombre from usuarios;");

      while (rs.next()) {
         System.out.println("login = " + rs.getString("usr_login"));
         System.out.println("nombre = " + rs.getString("usr_nombre"));
      }

      rs.close();
      con.close();
   }
}
Código 3 – Ejemplo Conexión Java y SQL server 2005 por medio de JDBC-ODBC.