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; } }
So nice to read this in spanish! Marco
ResponderEliminarThanks so much ^^
EliminarExcelente aporte...mil gracias....
ResponderEliminarGracias!!!! :)
Eliminar:/ No me aparece la carpeta librerías!
ResponderEliminarMe ha servido de mucho! tienes alguno sobre como insertar datos a la base ?
ResponderEliminarGracias!
En el ejemplo tienes la función para ejecutar cualquier sentencia sql:
Eliminarpublic 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.
Buenas tardes!
EliminarEsto 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.
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.
EliminarLo 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,...)";
Porque no pones el Class.forName;
ResponderEliminarNo tengo ya este proyecto :( Pero para el tutorial no hace falta. Un saludo
Eliminaringeniera 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"
ResponderEliminarconecta perfectamente a la base de datos... pero no guarda.. auxilioooo
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"
ResponderEliminarconecta perfectamente a la base de datos... pero no guarda.. auxilioooo
Buenas, gracias por comentar.
EliminarA 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
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
ResponderEliminarHola,
EliminarPues tienes que leer el campo de texto con java y después realizar un insert en la base de datos.
Un saludo.
Ingeniera Sandra mucho gusto me encanto la explicacion, y me esta sirviendo de mucho para la practica que ando realizando!!!!! le agradesco
ResponderEliminar¡Gracias por comentar!
EliminarUn saludo.
Hola Encantado como haria para crear la interface en java y conectar
ResponderEliminarSe 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
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.
EliminarUn saludo.
No te imaginas lo que te adoro ahora mismo...
ResponderEliminar¡¡Millones de gracias!!
Encima ha funcionado a la primera, sin una sola excepción... Eres increíble ♥
Muchas gracias! ;)
EliminarHola Sandra, te super agradezco por tu tiempo y tu explicación, me ha sido muy útil todo lo que has compartido.
ResponderEliminarMuchas gracias a ti por comentar :) .
EliminarHola Sandra:
ResponderEliminarSeguí 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é.
Mira si tienes añadidos los 5 jar al proyecto:
EliminarUCanAccess (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
Gracias Sandra. Lo volveré a revisar bien, pero sí que tengo incluidas todas esas bibliotecas.
EliminarMuchas gracias de todas formas.
Excelente!!! Muchas gracias... DUDA Como le hago para que la consulta regrese más de un campo?
ResponderEliminarPues eso depende de como quieras hacer el SELECT, eso te tienes que mirar cómo hacer consultas a la BD.
EliminarHola 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?
ResponderEliminarSiempre es mejor tener la más reciente, tu pruébalo.
EliminarUn saludo.
Hola, Muy util el video.
ResponderEliminar¿Podrías poner un ejemplo de como hacer una sentencia Select utilizando PreparedStatement?
Gracias.
NO tengo ninguno hecho, lo siento.
EliminarUNA PREGUNTA COMO HACER PARA MANDARLO A UN JFRAME?
ResponderEliminar¿Qué es lo que quieres mandar a un jframe? Un saludo.
EliminarCreame un programa enlazado a Access justo ahora, es para un examen ploxx
ResponderEliminarGRacias
EliminarMil Gracias Sandra mucho tiempo he sufrido con estos driver
ResponderEliminareste ejemplo esta super ok de nuevo mil gracias
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.
ResponderEliminarDepende 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.
EliminarMuy 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.
ResponderEliminarEstoy 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
Ahora mismo no dispongo de mucho tiempo, pero en cuanto pueda no me importaría.
EliminarUn saludo.
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
ResponderEliminarEn la sentencia sql puedes poner lo que quieras seleccionar, mira cómo hacer las sentencias sql.
EliminarUn saludo.
Ingeniera, buenos días:
ResponderEliminarSoy 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).
Excelente te evitas de muchos problemas de configuraciones con las configuraciones Gracias!
ResponderEliminarHola probé este código pero me salta error, anteriormente había utilizado otro código y me aparece exactamente el mismo error:
ResponderEliminarjava.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!
Muy bueno, gracias, podre reactivar mi base de datos de access
ResponderEliminarComo 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...
ResponderEliminarNo debería de dar problemas, mira qué error te da.
Eliminarmuchas 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
ResponderEliminarGracias por el comentario. No, todavía no los he hecho.
EliminarIngeniera, 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 ..
EliminarSandra, por que no me devuelve los campos en terminal?
ResponderEliminar