JDBC para Access sin DSN

Para acceder a Access desde un JDBC, siempre nos han enseñado que se debe a Herramientas Administrativas > Administrador de Orígines de ODBC, crear un nuevo Origen, especificar el nombre del DNS, bla bla bla, y después desde el JDBC escribir como URL el nombre del DNS, bla bla.
Lo malo de esta técnica es que en cada máquina donde se va a ejecutar la aplicación java, necesita que se configure el ODBC. Ya que somos profesionales, debemos evitar las configuraciones adicionales para que nuestra aplicación funcione.

Java nos hace profesionales :)

Así que, ahora evitaremos todo el rollo de crear el DSN en el ODBC. Usemos esto:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String myDB ="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/data/neptuno.MDB";
Connection conn = DriverManager.getConnection(myDB,"","");
Pero no solo es para Access, sino para cualquier ODBC. Veamos como hacer lo mismo pero para con el Excel

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String myDB = "jdbc:odbc:Driver={Microsoft Excel Driver (*.xls)};DBQ=c:/data.xls;"
+ "DriverID=22;READONLY=false";
Connection conn=DriverManager.getConnection(myDB,"","");
Share on Google Plus
    Blogger Comment
    Facebook Comment

18 comentarios:

Anónimo dijo...

Hola Buenas he estado buscando información para poder conectarme a una bbdd en acces sin tener que configurar DNS, ya que el programa cuando lo instale en otro ordenador no quiero tener que hacer nada. Bueno el problema es que este codigo me da un error y no se por que te lo comento por si sabes algo del tema.
El error es este:
[Microsoft][Controlador ODBC Microsoft Access] No se pudo encontrar el archivo '(desconocido)'.


Te puedo asegurar que el archivo existe.
Gracias

Diego Silva dijo...

Trata de configurar un DSN de ODBC en ese computador.
Luego, asegúrate que esté bien escrito el DSN del Java, revisa los "/" que estén en lugar de los "\"

Anónimo dijo...

y como seria en el caso de DSN para MySql¿?

Diego Silva dijo...

¿Conectar desde Java a MySQL usando ODBC?
Para hacerlo se utiliza un driver JDBC (Java Database Connect). MySQL tiene el suyo

>http://dev.mysql.com/downloads/connector/j/

Para usarlo, lee su manual:

http://dev.mysql.com/doc/refman/5.1/en/connector-j.html

Carlos dijo...

hola... estoy siguiendo este tutorial (de gran ayuda gracias :D) pero me encuentro con un problema al seleccionar un rango de la hoja excel (con la siguiente query "SELECT * FROM [Sheet1$a1:c3]") ya que dependiendo del nombre de la hoja funciona o no. ¿Sabrás cual puede ser el problema?
INFO: Al ejecutar sin el rango me muestra el problema: [Error Code: -1002, SQL State: 37000] [Microsoft][Controlador ODBC Excel] Corchetes no válidos en el nombre ' a d$'. Lo que me indica que si entrecomillo el nombre de la hoja dentro de los corchetes (['nombre']) funciona... pero usando este entrecomillado parece que no se puede seleccionar el rango...
Un Saludo y gracias por atenderme

Diego Silva dijo...

Hola
intenta ponerle un nombre a ese rango, y llámalo usando ese nombre.

Carlos dijo...

Gracias por la contestación ... pero no me interesaría tener que nombrar el rango desde el Excel... a menos que se pudiese hacer desde el código... que creo que no.
Gracias y un Saludo.

rafa dijo...

Hola, gracias por las lineas de codigo, pero tengo una pregunta, estoy usando JPA, y no se como conectarme a mi base de datos, uso Access. ¿Alguna idea?

Diego Silva dijo...

en web o desktop ?

rafa dijo...

En desktop, estoy haciendo una aplicación básica de toma de contacto con JPA, es decir, estoy empezando a trabajar con JPA jeje.

Diego Silva dijo...

Para acceder a Access se necesita de un ODBC, y este no es JDBC nativo, por tanto no es tan fácil hacerlo. Recomiendo siempre usar un JDBC nativo de categoría 4 (Es decir, nada de ODBC). Por ejemplo MySQL, ApacheDB, PostgreSQL, MS SQL, etc... casi todos los motores de base de datos tienen su JDBC.

rafa dijo...

Gracias por tu ayuda, pero en el pc donde estoy trabajando, SOLO puedo hacerlo con Acces, he probado a hacer la conexion tipica de JDBC, crearConexion, cargarDriver y eso. Al ejecutar me da exepcion en esta línea:
EntityManager em = factory.createEntityManager();
Y en consola me aparece esto:

[EL Info]: 2010-08-11 09:33:21.715--ServerSession(2693887)--property eclipselink.jdbc.user is deprecated, property javax.persistence.jdbc.user should be used instead.
[EL Info]: 2010-08-11 09:33:21.755--ServerSession(2693887)--property eclipselink.jdbc.driver is deprecated, property javax.persistence.jdbc.driver should be used instead.
[EL Info]: 2010-08-11 09:33:21.755--ServerSession(2693887)--property eclipselink.jdbc.url is deprecated, property javax.persistence.jdbc.url should be used instead.
[EL Info]: 2010-08-11 09:33:21.755--ServerSession(2693887)--property eclipselink.jdbc.password is deprecated, property javax.persistence.jdbc.password should be used instead.
[EL Info]: 2010-08-11 09:33:23.791--ServerSession(2693887)--property eclipselink.jdbc.user is deprecated, property javax.persistence.jdbc.user should be used instead.
[EL Info]: 2010-08-11 09:33:23.791--ServerSession(2693887)--property eclipselink.jdbc.driver is deprecated, property javax.persistence.jdbc.driver should be used instead.
[EL Info]: 2010-08-11 09:33:23.791--ServerSession(2693887)--property eclipselink.jdbc.url is deprecated, property javax.persistence.jdbc.url should be used instead.
[EL Info]: 2010-08-11 09:33:23.801--ServerSession(2693887)--property eclipselink.jdbc.password is deprecated, property javax.persistence.jdbc.password should be used instead.
[EL Info]: 2010-08-11 09:33:25.467--ServerSession(2693887)--EclipseLink, version: Eclipse Persistence Services - 2.1.0.v20100614-r7608
[EL Severe]: 2010-08-11 09:33:25.477--ServerSession(2693887)--Local Exception Stack:
Exception [EclipseLink-4003] (Eclipse Persistence Services - 2.1.0.v20100614-r7608): org.eclipse.persistence.exceptions.DatabaseException
Exception Description: Configuration error. Class [] not found.
at org.eclipse.persistence.exceptions.DatabaseException.configurationErrorClassNotFound(DatabaseException.java:82)
at org.eclipse.persistence.sessions.DefaultConnector.loadDriverClass(DefaultConnector.java:267)
at org.eclipse.persistence.sessions.DefaultConnector.connect(DefaultConnector.java:85)
at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)
at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:579)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:228)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:380)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:157)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:214)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:202)

No se que hacer, la verdad que mi ejemplo es bastante tonto, tengo una clase alumno, con nombre,etc.. y lo que quiero es mediante unos sets, persistir el objeto alumno y que me lo cree en la base de datos..

Gracias

Diego Silva dijo...

El error que te dice exactamente es este:

Exception Description: Configuration error. Class [] not found.

Clase [] (¿cual clase?) no se encontró.

Revisa qué clases estás utilizando para hacer tu JPA. Asegúrate que diga "sun.jdbc.odbc.JdbcOdbcDriver"

rafa dijo...

buenas diego, te dejo mi mail, no consigo arreglarlo, un saludo.

alexinhoR@hotmail.com

Jose David dijo...

yo recientemente he iniciado la programación en java y para conectarme a java era un problema con los odbc estaba cerca de hacerlo y ley en el articulo y estaba cerca , ahora necesito conectarme a openoffice pueden ayudarme????

Diego Silva dijo...

OpenOffice Base utiliza internamente la base de datos HSQLDB. Aquí hay un post explicando como funciona.

http://www.apuntesdejava.com/2009/01/base-de-datos-relacionales-en-java.html

¿Pero conectar desde Java al Base usando ese driver?.. pregunta interesante... voy a revisar.

marcorengifo15 dijo...

HOLA QUISIERA SABER COMO GENERAR EL CODIGO PARA SQL SERVER POR FAVOR SERIAN TAN AMABLES DE AYUDARME Y DARME UNOS POCOS PARAMETROS DE CONFIGURACION POR QUE NO CONECTA ADEMAS QUE GENERE UNA APLICACION JAR Y LA VERDAD NO FUNCIONA OSEA NO ME ABRE TENGO INSTALDO TODO PERO AL TENER TB INSTALADO EL OVI DE NOKIS ME APARECIA COMO UNA APLICACION JAVA PARA TELEFONO MOVIL Y NO UNA APLICACION JAR PARA COMPUTADOR ALGUIEN SABE COMO CONFIGURAR ESTO POR FAVOR TENGO WINDOWS 7 POR ESO ES LA CONFUSION EN WINDOWS XP NUNCA TUBE PROBLEMA!!!

TheSystem20 dijo...

Hola muchas gracias por el post disculpa, dos preguntas 1: ¿que versiones de access soporta esas instrucciones?, 2: ¿El DSN debe estar limpio o aunque tenga una DB ya alojada funciona.