Ir al contenido principal

Instalando Apache NetBeans 10 y configurarlo con Jakarta EE

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,"","");

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.

Entradas más populares de este blog

RESTful... la forma más ligera de hacer WebServices (Parte 1)

Quienes hayan usado SOAP para WebService, sabrán que es bien fácil de diseñar, pero algo complicado de consumir: se necesita toda una API para construir los clientes utilizando el WSDL. Por ejemplo, para PHP se necesita de la biblioteca NuSOAP. Entonces, para lograr el concepto de "lenguaje único XML" es un dolor de cabeza. Y más aún si el cliente es tan simple como JavaScript, manejar XML de SOAP provocaría suicidos masivos... o no usar WebServices.

Además, con SOAP se permite crear un solo servicio y ponerle varios métodos. Esto puede llevar a un mal diseño del servicio ya que podría tener un servicio que haga de todo: por ejemplo, un servicio de manejo de Clientes que permita también manejar Proveedores.

RESTful es una propuesta muy interesante de Roy Fielding que permite manejar los servicios web con métodos definidos, manteniendo la simpleza del protocolo como XML, pero que cada servicio sea identificado únicamente con un solo URI.

En este post veremos cómo crear un Ser…

¿Por valor o por referencia?

Esta es una pregunta existencial para todo programador Java. Cada uno encuentra una respuesta satisfactoria. Pero ahora veremos, basándonos en el libro para Certificación SCJP 1.5 de Katty Sierra, sobre la respuesta correcta.

Contraseñas encriptadas con Java

¿Quién no ha querido encriptar texto o archivo? Hay diversas maneras para hacer eso, por ejemplo, utilizando un diccionario donde se reemplazara cada caracter por un código.. y para poder desencriptarlo se debería utilizar el mismo diccionario para revertir el proceso. Pero si el diccionario cae en manos de alguien que no queremos que lo sepa, entonces estamos en peligro.
Cuando yo programaba en pascal, mi encriptación favorita era invirtiendo los bits... pero cualquiera también puede invertir los bits y listo.
Pero ya gente experta logró algoritmos de encriptación populares. Los más conocidos: MD5 y SHA.
En este post hablaremos cómo encriptar texto, sobretodo las contraseñas, utilizando MD5 o SHA.