28/1/11

Conexion base de datos Access y Java


Para poder acceder a una base de datos de Acces 2000-2010 de Microsoft, podemos utilzar dos formas, una de ellas es utilizando un Origen de Datos ODBC para utiliarlo como puente entra Access y Java, ó,una forma mas directa, es enlazar la base de datos Access con Java utilizando la API JDBC de java y especificando el driver, la base de datos y el password (si es que tuviera) para realizar una conexion como se hizo con MySQL y Java. (Conexion a Base de datos)


Nuestra clase java para poder realizar una conexion, es la iguiente:

Clase: Access_connection.java
codigo fuente
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class Access_connection {
   //contraseña a la base de datos si es que tuviera, si no se deja vacio
   static String password = "";
   //nombre de la base de datos Acces con extension *.mdb o *.accdb
   static String dbName = "TU_BASE_DE_DATOS.mdb";
   //direccion de la base de datos
   static String bd = System.getProperty("user.dir") + "\\" + dbName + ";PWD=" + password;
   //driver para base de datos Access 2000, 2003, 2007, 2010
   static String url = "jdbc:odbc:;DRIVER=Microsoft Access Driver (*.mdb, *.accdb);DBQ=" + bd;
   Connection conn = null;
   
   public Access_connection() {
      try{
         //obtenemos el driver para Access 
         Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
         //obtenemos la conexión         
         conn = DriverManager.getConnection(url);
         //si la conexion tuvo exito
         if (conn!=null){
            System.out.println("Conexión a base de datos "+bd+". listo");
         }
      }catch(SQLException e){
         System.out.println(e);
      }catch(ClassNotFoundException e){
         System.out.println(e);
      }
   }
   
   /**Permite retornar la conexión*/
   public Connection getConnection(){
      return conn;
   }

   //como dice su nombre, termina la conexion a la base de datos
   public void desconectar(){
        try {
            conn.close();
            //conn = null;
            System.out.println("La conexion a la  base de datos " + bd + " a terminado");
        } catch (SQLException ex) {
            Logger.getLogger(Access_connection.class.getName()).log(Level.SEVERE, null, ex);
        }
       
   }
}

La direccion a la base de datos  se la realiza utilizando el comando "System.getProperty("user.dir")", el cual nos retorna la direccion de nuestro proyecto (*.JAR), si se desea especificar otra dirección, por ejemplo: "E:/mi base de datos/db.mdb", solamente se debe eliminar esa instruccion.

La forma de implementar esta clase, es similar a la clase conexion MySQL Conexion a Base de datos. osea:


public class Main {

    public static void main(String[] args) {
      //se realiza la conexion   
        Access_connection access = new Access_connection();
 //se cierra la conexion
        access.desconectar();
    }
    
}

Access cuenta con dos extensiones para base de datos, para versiones antiguas 2000-2003 utiliza la extension  *.mdb y para las versiones recientes de access 2007-2010, utiliza *.accdb, esta clase, Access_connection.java, realiza la conexion para ambas versiones.

fin?

13 comentarios:

  1. HOLA BUEN DIA.. MUY CHEVERE LA APLICAION.. ME PREGUNTO SI ME PUEDE ASESORAR CON UN PROGRAMA SIMILAR MI CORREO ES todorico1987@hotmail.com ... gracias

    ResponderEliminar
  2. Es muy buen Blog Pero (Tu proyectos tienen fallas en general) y si vas a poner como descarga tus proyectos pon los completos y q se puedan descargar Ing.

    ResponderEliminar
  3. Hola me ha servido mucho tu codigo fuente pero me marca errores podrias decirme porque? Soy primerisa en estas cuestiones te agradezco de antemano tu ayuda

    Los errores que marca son estos
    java.sql.SQLException: [Microsoft][Controlador ODBC Microsoft Access]Error general No se puede abrir la clave 'Temporary (volatile) Ace DSN for process 0xf84 Thread 0xda4 DBC 0x4ec8004 Jet' del Registro.
    Exception in thread "main" java.lang.NullPointerException
    at Prueba1.Access_connection.desconectar(Access_connection.java:51)
    at Prueba1.Access_connection.main(Access_connection.java:72)

    ResponderEliminar
  4. ey men, una pregunta, de antemano agradeciendo tu trabajo y apoyo, jaja....tengo winndows siete y no puedo conectar las bd por que son puedo "agendar" el DNS a los origenes de datos ODBC, tendras la respuesta a my problem, jajaj!!!, reiterando el agradecimiento por tu portal y ayuda...le_ose

    ResponderEliminar
  5. Hola :D me sirvió mucho tu código muy buen ejemplo... saludos

    alex

    ResponderEliminar
  6. para agregar origenes ODBC en win 7 debes ir a la carpeta de windows y luego a la carpeta SysWOW64 y ejecutar el archivo odbcad32.exe

    en win7 se invirtio el lugar donde se encuentran los archivos odbcad32.exe para 32 bits y 64 bits, es por eso que no te funciona el que esta en el panel de control, herramientas administrativas

    ResponderEliminar
  7. Milly dijo:
    descargue tu archivo pero no me funciona dice k no encuentra el driver para hacer la conexion con acces y aunque quiero agregar el diver mi maquina dice k no se han istalado el driver para acces k puesdo hacer

    ResponderEliminar
  8. Muchas Gracias por tu aporte, fuiste de gran ayuda!!. Publico el mismo código pero sin los pequeños errores que se te fueron :P


    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.logging.Level;
    import java.util.logging.Logger;

    /**
    *
    * @author Pablo Fuentes
    */
    public class ConexionDB {
    //contraseña a la base de datos si es que tuviera, si no se deja vacio
    private String password = "";
    //nombre de la base de datos Acces con extension *.mdb o *.accdb
    private String dbName = "TU_BASE_DE_DATOS.mdb";
    //direccion de la base de datos
    private String bd = System.getProperty("user.dir") + "\\" + dbName + ";PWD=" + password;
    //driver para base de datos Access 2000, 2003, 2007, 2010
    private String url = "jdbc:odbc:;DRIVER=Microsoft Access Driver (*.mdb, *.accdb);DBQ=" + bd;
    Connection conn = null;

    public void Access_connection() {
    try{
    //obtenemos el driver para Access
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    //obtenemos la conexión
    conn = DriverManager.getConnection(url);
    //si la conexion tuvo exito
    if (conn!=null){
    System.out.println("Conexión a base de datos "+bd+". listo");
    }
    }catch( SQLException | ClassNotFoundException e){
    System.out.println(e);
    }
    }

    /**Permite retornar la conexión*/
    public Connection getConnection(){
    return conn;
    }

    //como dice su nombre, termina la conexion a la base de datos
    public void desconectar(){
    try {
    conn.close();
    //conn = null;
    System.out.println("La conexion a la base de datos " + bd + " a terminado");
    } catch (SQLException ex) {
    Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
    }

    }

    }

    ResponderEliminar
  9. Hola, agradezco mucho que te tomes el trabajo de hacer este blog que es de gran ayuda, quisiera saber si tienes alguna entrada (yo no encontre ninguna), donde expliques la conexion a una bd remota (en otra pc o en un servidor web, ambas), muchas gracias de antemano

    ResponderEliminar
  10. Muchisimas Gracias tu código está fenomenal me sirvió de mucho... sigue publicando cosas así... Me gusta mucho tu blog... Saludos desde Colombia.

    ResponderEliminar
  11. Hola, sabes como hay que hacer para que al crear el .jar y ejecutarlo funcione la conexión con la base de datos?

    ResponderEliminar