JAVA: Conectar con una Base de Datos Access con JDBC

  

   En este tutorial vamos a ver como conectarnos a una base de datos de Microsoft Access mediante el driver JDBC en Java. Yo he utilizado Netbeans, pero se hace igual en Eclipse.

   El driver JDBC/ODBC está obseleto a partir de la versión 8 de java. Tuve muchos problemas al hacer una aplicación que se tenia que conectar con una base de datos antigua hecha en Microsoft Access. Al final lo conseguí con unos drivers hechos en java, en definitiva unas librerias. Se llama UCanAccess y la podéis descargar AQUÍ.

   Tenemos que elegir la opción que pone .bin de la versión más reciente:


   Cuando las descargamos y descomprimimos cogemos todos los .js (uno está en la raíz principal y los otros en la carpeta lib) y los ponemos todos juntos en una carpeta. Simplemente por comodidad a la hora de agregarlos al proyecto. También guardo la carpeta en la ruta donde están mis proyectos para tenerla siempre a mano, porque si luego se cambia de sitio habrá que volverlas a añadir al proyecto porque no encuentra la ruta.



   Ahora nos creamos un proyecto nuevo en Netbeans (File/New Project/Java/Java Application) o en Eclipse (File/New/Java project).

   En Netbeans nos aparece una carpeta Libraries y le damos botón derecho y pinchamos en Add JAR/Folder.


 
   Seleccionamos nuestra carpeta donde nos hemos descargado y copiado las librerías anteriores, marcamos todas y le damos a Abrir.



    En Eclipse es en botón derecho en el proyecto, Properties y las añadimos en esta pantalla:



  Con esto ya tenemos nuestras librerias en el proyecto. Ahora sólo queda crear el código para conectarnos. He realizado un pequeño proyecto donde tengo implementada la clase para la conexión. En el video podéis ver como se hace esa conexión. Os podéis descargar el proyecto en esta DIRECCIÓN.

   Aparecerán tres carpetas, una con las librerías, otra con la BD Access y otra con el proyecto.

   Os dejo una de las clases del proyecto, que es la clase de conexión a la base de datos. El resto como os digo lo podéis ver en el video y en los archivos que he subido.

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import javax.swing.JOptionPane;



/**

 *

 * @author Sandra

 */

public class connectBD {

   

    private Connection conexion;

    private Statement sentencia;

   

    private final String controlador;

    private final String nombre_bd;

    private final String usuarioBD;

    private final String passwordBD;

   

   

    public connectBD(){

        this.controlador="sun.jdbc.odbc.JdbcOdbcDriver";

        this.nombre_bd="C:\\Users\\Sandra\\Documents\\NetBeansProjects\\BD_Access\\Prueba_Java.accdb";

        this.usuarioBD="";

        this.passwordBD="";

       

    }

   

    public boolean EstablecerConexion() throws SQLException{

       

      

        try{

            conexion=DriverManager.getConnection("jdbc:ucanaccess://"+this.nombre_bd,this.usuarioBD,this.passwordBD);

        }catch (SQLException e){

             JOptionPane.showMessageDialog(null,"Error al realizar la conexion "+e);

             return false;

        }

       

        try {

            this.sentencia=this.conexion.createStatement(

            ResultSet.TYPE_SCROLL_INSENSITIVE,

                    ResultSet.CONCUR_READ_ONLY);

        }

        catch (SQLException e) {

            JOptionPane.showMessageDialog(null,"Error al crear el objeto sentencia "+e);

            return false;

        }

       

        return true;

       

    }

   

    public ResultSet EjecutarSentencia( String sql) throws SQLException{

       

        ResultSet rs;

        rs = this.sentencia.executeQuery(sql);

       

       

        return rs;

    }

}

54 comentarios: Deja tu comentario

  1. So nice to read this in spanish! Marco

    ResponderEliminar
  2. :/ No me aparece la carpeta librerías!

    ResponderEliminar
  3. Me ha servido de mucho! tienes alguno sobre como insertar datos a la base ?
    Gracias!

    ResponderEliminar
    Respuestas
    1. En el ejemplo tienes la función para ejecutar cualquier sentencia sql:

      public ResultSet EjecutarSentencia( String sql) throws SQLException{



      ResultSet rs;

      rs = this.sentencia.executeQuery(sql);





      return rs;

      }

      Te tienes que crear una cadena con la sentencia sql que quieras ejecutar, como por ejemplo un insert:

      String sql ="SELECT [nombre] FROM [casa]"; ( lo mismo pero con un insert)

      Y ahora llamar a esa función que devuelve un tipo de dato "ResultSet":

      ResultSet aux_result=EjecutarSentencia(sql);

      Esto está en el ejemplo del tutorial que te puedes descargar. Un saludo.

      Eliminar
    2. Buenas tardes!
      Esto no sé si llegarás a ver esto; en todo caso lo dejo aquí: he seguido los pasos del ejemplo que explicaste y me sale, pero por ejemplo para mostrar todo no me deja, me dice "Exception in thread "main" net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.0 usuario no tiene privilegios suficientes o objeto no encontrado"

      Y en cuanto a lo de insertar que preguntó el compañero que respondiste, yo no lo he podido entender muy bien, si puede responderme, se lo agradecería, gracias.

      Eliminar
    3. Me da que ese error es porque o bien el usuario con que se conecta a la BD no tiene privilegios para usar esa BD, o bien el nombre de la BD o de alguna tabla no existe.

      Lo del insert siginifica que en vez de hacer el string con el select hacerlo con un insert -> String sql ="INSERT INTO table_name VALUES (value1,value2,value3,...)";

      Eliminar
  4. Respuestas
    1. No tengo ya este proyecto :( Pero para el tutorial no hace falta. Un saludo

      Eliminar
  5. ingeniera un placer y agradecido con su video.. pero estoy con Netbeans 8.0 y solo permite la conexión con String driver= "net.ucanaccess.jdbc.UcanaccessDriver".. y no con "jdbc.....UcanaccessDriver"
    conecta perfectamente a la base de datos... pero no guarda.. auxilioooo

    ResponderEliminar
  6. ingeniera un placer y agradecido con su video.. pero estoy con Netbeans 8.0 y solo permite la conexión con String driver= "net.ucanaccess.jdbc.UcanaccessDriver".. y no con "jdbc.....UcanaccessDriver"
    conecta perfectamente a la base de datos... pero no guarda.. auxilioooo

    ResponderEliminar
    Respuestas
    1. Buenas, gracias por comentar.
      A mi me funciona con este: sun.jdbc.odbc.JdbcOdbcDriver. Por lo menos en el momento que hice el tutorial. Si ha cambiado vendrá en la documentación de ucanAccess:
      http://ucanaccess.sourceforge.net/site.html

      Eliminar
  7. una pregunta ingeniera estoy perdido, como hago que la información registrada en una campo de texto aparezca en la base de datos de access

    ResponderEliminar
    Respuestas
    1. Hola,
      Pues tienes que leer el campo de texto con java y después realizar un insert en la base de datos.
      Un saludo.

      Eliminar
  8. Ingeniera Sandra mucho gusto me encanto la explicacion, y me esta sirviendo de mucho para la practica que ando realizando!!!!! le agradesco

    ResponderEliminar
  9. Hola Encantado como haria para crear la interface en java y conectar

    Se trata de hacer una aplicación en Java que acceda a una base de datos (Access) de una tienda de ropa y mediante un menú pueda realizar determinas operaciones. La base de datos vacía, sin tablas, la puedes descargar desde el siguiente enlace:

    tiendaropa.mdb

    Puedes utilizar un JOptionPane para presentar el menú con las opciones que permita realizar el programa:

    Crear tabla Empleados.
    Contendrá los campos: Codigo_Empleado, Nombre_Empleado y Teléfono del mismo.
    Crear tabla Ventas.
    Por simplificar la aplicación, contendrá los campos: código del producto, nombre del producto y el código del empleado que realiza la venta. Puedes introducir más campos como el número de unidades que se venderían, etc., si lo deseas.
    Insertar datos en la tabla Empleados.
    Inserta cuatro empleados en la tabla de Empleados.
    Insertar datos en la tabla Ventas.
    Inserta cuatro órdenes de venta en la tabla de ventas.
    Recuperar datos de la tabla Empleados.
    Recupera los datos de la tabla Empleados y los muestra al usuario.
    Recuperar datos de la tabla Ventas.
    Recupera los datos de la tabla ventas y los muestra al usuario.
    Actualizar en tabla Empleados.
    Realizar una consulta de actualización, "Update", sobre un registro previamente insertado.
    Actualizar en tabla Empleados utilizando sentencias preparadas.
    Realizar una consulta de actualización, "Update", sobre un registro previamente insertado, utilizando sentencias preparadas.
    Actualizar registros de Ventas utilizando sentencias preparadas.
    Realizar una consulta de actualización, "Update", en la tabla ventas, sobre un registro previamente insertado, utilizando sentencias preparadas.
    Listar el nombre de los empleados que vendieron un artículo que se encuentre insertado en la tabla de Ventas, por ejemplo: calcetines

    ResponderEliminar
    Respuestas
    1. La conexión a la BD se hace como está en el tutorial y en el video creo que hay un ejemplo de query. Las querys las tienes que diseñar tu según todas las cosas que quieras hacer tal y como has explicado.
      Un saludo.

      Eliminar
  10. No te imaginas lo que te adoro ahora mismo...
    ¡¡Millones de gracias!!

    Encima ha funcionado a la primera, sin una sola excepción... Eres increíble ♥

    ResponderEliminar
  11. Hola Sandra, te super agradezco por tu tiempo y tu explicación, me ha sido muy útil todo lo que has compartido.

    ResponderEliminar
  12. Hola Sandra:
    Seguí tu tutorial para realizar una pequeña aplicación y perfecto cuando la hago correr desde cmd, pero si la hago correr desde(en mi caso)JCreator me da el siguiente error:

    Errorjava.sql.SQLException: No suitable driver found for jdbc:ucanaccess://D://curso/ClientesBruno.mdb

    Me estoy volviendo loco y no se porqué.

    ResponderEliminar
    Respuestas
    1. Mira si tienes añadidos los 5 jar al proyecto:
      UCanAccess (ucanaccess-x.x.x.jar)
      HSQLDB (hsqldb.jar, version 2.2.5 or newer)
      Jackcess (jackcess-2.x.x.jar)
      commons-lang (commons-lang-2.6.jar, or newer 2.x version)
      commons-logging (commons-logging-1.1.1.jar, or newer 1.x version)

      Fortunately, UCanAccess includes all of the required JAR files in its distribution file. When you unzip it you will see something like

      ucanaccess-4.0.1.jar
      /lib/
      commons-lang-2.6.jar
      commons-logging-1.1.1.jar
      hsqldb.jar
      jackcess-2.1.6.jar

      Aquí lo explican:
      http://stackoverflow.com/questions/21955256/manipulating-an-access-database-from-java-without-odbc

      Eliminar
    2. Gracias Sandra. Lo volveré a revisar bien, pero sí que tengo incluidas todas esas bibliotecas.
      Muchas gracias de todas formas.

      Eliminar
  13. Excelente!!! Muchas gracias... DUDA Como le hago para que la consulta regrese más de un campo?

    ResponderEliminar
    Respuestas
    1. Pues eso depende de como quieras hacer el SELECT, eso te tienes que mirar cómo hacer consultas a la BD.

      Eliminar
  14. Hola tengo una practica que me esta volviendo loca en caso de los drivers pude observar que ocupaste la version 3.0 en mi caso puedo agregar el mas reciente?

    ResponderEliminar
    Respuestas
    1. Siempre es mejor tener la más reciente, tu pruébalo.
      Un saludo.

      Eliminar
  15. Hola, Muy util el video.
    ¿Podrías poner un ejemplo de como hacer una sentencia Select utilizando PreparedStatement?
    Gracias.

    ResponderEliminar
  16. UNA PREGUNTA COMO HACER PARA MANDARLO A UN JFRAME?

    ResponderEliminar
  17. Creame un programa enlazado a Access justo ahora, es para un examen ploxx

    ResponderEliminar
  18. Mil Gracias Sandra mucho tiempo he sufrido con estos driver
    este ejemplo esta super ok de nuevo mil gracias

    ResponderEliminar
  19. Hola, su tutorial es el único al que le he entendido, muchas gracias por elaborarlo. Soy estudiante de bachillerato en la especialidad de programación y realicé su tutorial sin errores. Pero tengo la duda de cómo hacer que los datos de la base los imprima en campos de texto. O sea que imprima los datos por registro, y que tenga los botones Buscar, Eliminar, Actualizar y Modificar. Es para un proyecto y no logro saber cómo realizar esa función.

    ResponderEliminar
    Respuestas
    1. Depende de cómo hagas tu aplicación. Pero haciendo una consulta a la BD que te devuelva todo es suficiente. Luego tienes que ponerlos en los campos que tu definas. Un saludo.

      Eliminar
  20. Muy Buena explicacion te animarias armar otro video que expliques como llenar una Jtablet, agregar y eleminar datos usando esto que explicas. Te lo agradeceria mucho.
    Estoy intentando armar algo y es justo eso lo que no me funciona no logro hacer que insert en la base de datos una serie de datos en cada columna o que pueda tomar los datos para llenar un jtablet

    ResponderEliminar
    Respuestas
    1. Ahora mismo no dispongo de mucho tiempo, pero en cuanto pueda no me importaría.

      Un saludo.

      Eliminar
  21. como hago para seleccionar dos campos de la base de datos, o sea, para que en netbeans muestre dos en vez de uno solo? ayuda :C

    ResponderEliminar
    Respuestas
    1. En la sentencia sql puedes poner lo que quieras seleccionar, mira cómo hacer las sentencias sql.

      Un saludo.

      Eliminar
  22. Ingeniera, buenos días:
    Soy muy nuevo en esto de programación, pero quiero aprender, pues me parece muy emocionante e importante en especial tratándose de Java. Muy respetuosamente le agradecería altamente que me colaborara en lo siguiente:
    En Netbeans tengo un Proyecto, el cual dentro de la Carpeta “Paquetes de fuentes” tiene 2 paquetes: el primero, con un “Formulario” el cual tiene varios “Campos de Texto” o “JTextField”; el segundo, con la clase del proyecto que es la clase de conexión a la base de datos (la que tú nos proporcionaste); igualmente tengo la carpeta Bibliotecas en la cual cargué las librerías .jar que descargué de UcanAccess (commons-lang-2.6, commons-loggins-1.2, hsqldb-2.4.1, jackcess-2.1.11 y ucanaccess-4.0.4).
    Por favor, enséñame cómo debo hacer para que en c/u de los Campos de texto o JTextField se cargue información de una de las Tablas (Entidades) que tengo en una “BD de Access” (Prueba_Java.accdb).

    ResponderEliminar
  23. Excelente te evitas de muchos problemas de configuraciones con las configuraciones Gracias!

    ResponderEliminar
  24. Hola probé este código pero me salta error, anteriormente había utilizado otro código y me aparece exactamente el mismo error:

    java.sql.SQLException: No suitable driver found for jdbc:ucanacces://C:\Users\Administrador\Documents\Mueblelo.accdb;memory=false
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at Conexion.ConexionAccess.getConexion(ConexionAccess.java:16)

    ¡Ayuda por favor y gracias!

    ResponderEliminar
  25. Muy bueno, gracias, podre reactivar mi base de datos de access

    ResponderEliminar
  26. Como haria si la base de datos esta relacionada.. me da eerores de indexado cuando trato de conectar con bd normalizadas o relacionadas , es lo mismo...

    ResponderEliminar
  27. muchas gracias por esto... una pregunta, haz realizado tutoriales de como insertar, eliminar, editar registros??, me estoy iniciando en esto y la verdad me interesa mucho. Saludos Nolenoe

    ResponderEliminar
    Respuestas
    1. Gracias por el comentario. No, todavía no los he hecho.

      Eliminar
    2. Ingeniera, mis respetos .. llevo 20 días que inicie el mundo Java, y 8 días tratando de saber como utilizar una bdd de access ... nada me habia funcionado .. hasta que encontré tu excelente tutorial ... perfectamente claro ...muchas gracias ..

      Eliminar
  28. Sandra, por que no me devuelve los campos en terminal?

    ResponderEliminar