Foro de elhacker.net

Programación => Java => Mensaje iniciado por: |Miguel| en 14 Febrero 2012, 18:17 pm



Título: ¿No se encuentra origen de datos?
Publicado por: |Miguel| en 14 Febrero 2012, 18:17 pm
Hola, buenas... veamos estoy intentando actualizar una base de datos de Access desde Java con el siguiente código:

Código
  1. String nom=jtxtNombre.getText(), ape1=jtxtApellido1.getText(), ape2=jtxtApellido2.getText(), id=jtxtNum.getText();
  2.        String DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";
  3.        String miDB = "jdbc:odbc:propietarios";
  4.        try {
  5.            Class.forName(DRIVER);
  6.            Connection conexion =  DriverManager.getConnection(miDB);
  7.            PreparedStatement select = conexion.prepareStatement("SELECT * FROM Propietario where dni='"+id+"';");
  8.            ResultSet rs = select.executeQuery();
  9.            select=conexion.prepareStatement("update propietario set nombre='"+nom+"', apellido1='"+ape1+"', apellido2='"+ape2+"' where dni='"+id+"';");
  10.            select.executeUpdate();
  11.            rs.close();
  12.            select.close();
  13.            conexion.close();
  14.        }
  15.        catch (Exception e) {
  16.            System.out.println("Error: " + e);
  17.        }
  18.  

Y me da el siguiente error (excepción, en realidad):
Cita de: java
Error: java.sql.SQLException: [Microsoft][Administrador de controladores ODBC] No se encuentra el nombre del origen de datos y no se especific? ning?n controlador predeterminado

No entiendo qué le pasa. He definido mi archivo de base de datos desde Herramientas administrativas/Orígenes de datos ODBC. Adjunto captura de la configuración...
(http://bodegasantequera.ekiwi.es/config.png)

Saludos, y gracias!


Título: Re: ¿No se encuentra origen de datos?
Publicado por: |Miguel| en 14 Febrero 2012, 20:47 pm
Utilizando unos cuantos print he localizado la línea que falla, esta:
Código
  1. Connection conexion =  DriverManager.getConnection(miDB);
  2.  

Pero no llego a ver el fallo... El código completo de cómo he aislado la línea donde casca es este:
Código
  1. int i=1;
  2.            System.out.print(i);i++;
  3.            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");System.out.print(i);i++;
  4.            Connection conexion =  DriverManager.getConnection(miDB);System.out.print(i);i++;
  5.            PreparedStatement select = conexion.prepareStatement("SELECT * FROM Propietario;");System.out.print(i);i++;
  6.            ResultSet rs = select.executeQuery();System.out.print(i);i++;
  7.  

EDITO:
Cita de: java
12Error: java.sql.SQLException: [Microsoft][Administrador de controladores ODBC] La arquitectura del DSN especificado no coincide entre el controlador y la aplicaci?n.


Título: Re: ¿No se encuentra origen de datos?
Publicado por: |Miguel| en 14 Febrero 2012, 21:22 pm
He probado el programa tal cual, sin tocar código, en una máquina de 32 bits (antes lo hice en una de 64) y funciona perfectamente.

Mañana indagaré sobre el asunto, porque ya sabía que ese tema daba problemas pero supuestamente se solventaba utilizando este archivo c:\windows\syswow64\odbcad32.exe en lugar del acceso directo que hay en Herramientas adminsitrativas... pero no, por lo visto hay algo que desconozco o debo haber olvidado...

Saludos.


Título: Re: ¿No se encuentra origen de datos?
Publicado por: jperezmonge en 19 Febrero 2012, 13:29 pm
No se si te ayuda algo o quizás entiendas mas que yo y te rías de mi. Yo trabajo con mysql y lo único que tengo que hacer es al proyecto con el que estoy trabajando adjuntar el jar donde están los driver, no se si te sirve de algo.


Título: Re: ¿No se encuentra origen de datos?
Publicado por: |Miguel| en 19 Febrero 2012, 13:41 pm
Al final era lo que comentaba antes, que al compilar en una máquina de 64 bits había que bajar el JDK a uno de 32 ya que no existen ODBC's de 64.

Lo que tú dices creo que es otra cosa, los driver hay que pasárselos siempre si no me equivoco... no sé, acabo de empezar a trastear con BBDD .


Título: Re: ¿No se encuentra origen de datos?
Publicado por: jperezmonge en 19 Febrero 2012, 14:32 pm
entonces estamos igual :)


Título: Re: ¿No se encuentra origen de datos?
Publicado por: theluigy13etv en 23 Septiembre 2012, 04:10 am
Citar
Mañana indagaré sobre el asunto, porque ya sabía que ese tema daba problemas pero supuestamente se solventaba utilizando este archivo c:\windows\syswow64\odbcad32.exe en lugar del acceso directo que hay en Herramientas adminsitrativas... pero no, por lo visto hay algo que desconozco o debo haber olvidado...

Disculpen que reviva este post pero creo que tengo la solución.
En windows 7 de 64 bits existen dos archivos odbcad32.exe que se encuentran en dos ubicaciones distintas.

c:\windows\syswow64\      .....<---- (Aquí esta el ODBC de 32 bits, no te confundas por los números contradictorios)
c:\windows\System32\      ..........<---- (Aquí esta el ODBC de 64 bits

La diferencia entre ambas es que el primero tiene la lista de controladores ODBC de 32 bits mientras que la segunda tiene la lista de controladores ODBC de 64 bits. Por defecto, cuando ingresas a Orígenes de Datos ODBC en el Panel de Control, te manda al Administrador ODBC de 64 bits. Pero en dicho Administrador no vas a encontrar el controlador de 64 bits de Access, en cambio si ingresas al segundo, osea, al que se encuentra en c:\windows\syswow64\ allí si lo encuentras. Con eso logras seleccionar el controlador 32 bits de Access. Pero creo que él error ocurre porque estás compilando tu trabajo en un JDK para 64 bits.

Yo lo que hice fue instalar el JDK de 32 bits, no necesité desinstalar el JDK de 64 bits, ya que se isntalan en carpetas diferentes. Luego, como utilizo el NetBeans, en las propiedades de proyecto, elijo el JDK que quiero utilizar para generar mi programa. Así, utilizando el JDK de 32 bits no hay ningún problema para conectar tu programa con la base de Datos de Access.


Título: Re: ¿No se encuentra origen de datos?
Publicado por: isakmtz en 1 Octubre 2012, 05:39 am
Oye theluigy13etv, que bueno que pones la solución.

Efectivamente yo tuve el mismo problema, tenia instalado el SDK de 64 bits y no seconectaba con Access 2007, entonces instale el SDK de 32 bits (jdk-6-windows-i586)

Tuve que ejecutar eclipse de 32 bits tambien.


Título: Re: ¿No se encuentra origen de datos?
Publicado por: theluigy13etv en 3 Octubre 2012, 00:50 am
Oye theluigy13etv, que bueno que pones la solución.

Efectivamente yo tuve el mismo problema, tenia instalado el SDK de 64 bits y no seconectaba con Access 2007, entonces instale el SDK de 32 bits (jdk-6-windows-i586)

Tuve que ejecutar eclipse de 32 bits tambien.

Sí, pero creo que no es necesario que tu Eclipse sea de 32 bits, porque yo tengo mi NetBeans de 64 bits pero de todas maneras puedo elegir el JDK con el que deseo trabajar para obtener mis aplicaciones. Osea puedo usar el JDK de 32 bits o de 64 bits a pesar que mi NetBeans es de 64 bits. En Eclipse supongo que debe ser algo parecido


Título: Re: ¿No se encuentra origen de datos?
Publicado por: alvifa en 1 Noviembre 2012, 21:46 pm
Hola theluigy13etv

Me podrias decir por favor donde cambio el jdk con el que quiero que compile mi programa. Tambien sabes porque aunque lo haya compilado en una maquina de 64bits me corre perfectamente en maquinas con XP de 32bits?

Gracias,


Título: Re: ¿No se encuentra origen de datos?
Publicado por: theluigy13etv en 1 Noviembre 2012, 23:05 pm
Para elegir el jdk con el que quiero trabajar solo lo sé hacer para el NetBeans.

Haces click derecho en el ícono de tu proyecto. Del menú contextual eliges la opción Properties.
Te va a salir una ventana, en la parte izquierda hay una lista de opciones, eliges la opción Libraries. Entonces tienes un combo box al lado derecho (con una etiqueta que dice Java Platform). En ese combo box van a estar todos los jdks que tienes instalado en tu computador. Allí eliges el jdk que te combiene para cada proyecto.

(http://www.subirimagenes.com/imagen-jdk-8095795.html)


Título: Re: ¿No se encuentra origen de datos?
Publicado por: alvifa en 5 Noviembre 2012, 17:23 pm
Hola theluigy13etv,

Gracias por la ayuda, lo que me pasa es que instale el JDK de 32 bits y lo compile tambien intente instalar de nuevo el Netbeans en una maquina con 32 bits y lo compile pero nada no me funciona, me parece como que ya desde la maquina con 64 bits se desligo y no me encuentra la conexion, por favor si me pudieran ayudar, me urge hacer correr este programa.

Adjunto el mensaje de error que me envia desde el cmd:

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at Administrador.AdministratorComponents.buscarFANombres(AdministratorComponents.java:245)
        at Cargador.Cargador.cargarCombo(Cargador.java:104)
        at Interfaz.JFPrincipal.<init>(JFPrincipal.java:49)
        at UI.UICommunicacion.Ingresar(UICommunicacion.java:78)
        at Interfaz.Acceso.txtPassKeyPressed(Acceso.java:168)
        at Interfaz.Acceso.access$200(Acceso.java:19)
        at Interfaz.Acceso$3.keyPressed(Acceso.java:117)
        at java.awt.Component.processKeyEvent(Unknown Source)
        at javax.swing.JComponent.processKeyEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
        at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source)
        at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source)
        at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
        at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$200(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)


Título: Re: ¿No se encuentra origen de datos?
Publicado por: theluigy13etv en 11 Noviembre 2012, 08:08 am
Hola theluigy13etv,

Gracias por la ayuda, lo que me pasa es que instale el JDK de 32 bits y lo compile tambien intente instalar de nuevo el Netbeans en una maquina con 32 bits y lo compile pero nada no me funciona, me parece como que ya desde la maquina con 64 bits se desligo y no me encuentra la conexion, por favor si me pudieran ayudar, me urge hacer correr este programa.

Adjunto el mensaje de error que me envia desde el cmd:

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at Administrador.AdministratorComponents.buscarFANombres(AdministratorComponents.java:245)
        at Cargador.Cargador.cargarCombo(Cargador.java:104)
        at Interfaz.JFPrincipal.<init>(JFPrincipal.java:49)
        at UI.UICommunicacion.Ingresar(UICommunicacion.java:78)
        at Interfaz.Acceso.txtPassKeyPressed(Acceso.java:168)
        at Interfaz.Acceso.access$200(Acceso.java:19)
        at Interfaz.Acceso$3.keyPressed(Acceso.java:117)
        at java.awt.Component.processKeyEvent(Unknown Source)
        at javax.swing.JComponent.processKeyEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
        at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source)
        at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source)
        at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
        at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$200(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)

Hola. Te voy a detallar los pasos que yo seguí en mi PC. Te aclaro que yo tengo el SO Windows 7 Ultimate de 64 bits, y el NetBeans de 64 bits, además del JDK de 64 bits. Y con la base de Datos con la que necesitaba conectarme era con Access.


Primero te creas el DSN del sistema con el Administrador de Orígenes de Datos de 32 bits, (el que se encuentra en c:\windows\syswow64\odbcad32.exe).

Luego, instalé un JKD de 32 bits. Como te dije líneas arriba, yo ya tengo instalado un JDK de 64 bits, el JDK de 32 bits de instala en otra carpeta. De esta manera vas a tener 2 JDKs distintos. (Si quieres le instalas más, la versión que necesites).

Luego me fui a la barra menús de NetBeans. En el menú Tools (Herramientas), eliges el item Java Platforms . Te abre una ventana llamada "Java Platform Manager".  Estando allí verás en el lado izquierda una lista de JDKs que tienes para poder utilizar en NetBeans. En mi caso aparecía solo un JDK de la siguiente manera:
JDK 1.7 (Default)

Este correspondía a mi JDK de 64 bits. Pero no aparecía el JDK de 32 bits que instalamos al último, por eso necesitaba agregarlo al NetBeans, para eso hice clic al botón Add Platform.

Me salía otra ventana llamada "Add Java Platform". En esa ventana tenía que buscar el JDK de 32 que había instalado último. Para eso la ruta en la que normalmente se instala el JDK de 32 bits (en un SO de 64 bits como el mío es) : c:/Archivos de Programa(x86)/Java/

Allí aparece una carpeta llamada jdk 1.6.0_06. En tu caso te aparecerá la versión correspondiente de tu JDK, lo importante es que sea el de 32 bits. Seleccionas la carpeta y haces clic en el botón Next. Luego clic en el botón Finish
Ahora en la lista de JDKs te aparecerán dos, el que tenías al inicio, y el que agregaste último (32 bits).

Ahora, para que mi programa se pueda conectarse con una base de Datos Access cuyo controlador ODBC es de 32 bits, hice lo siguiente:

Haces click derecho en el ícono de tu proyecto. Del menú contextual eliges la opción Properties.
Te va a salir una ventana, en la parte izquierda hay una lista de opciones, eliges la opción Libraries. Entonces tienes un combo box al lado derecho (con una etiqueta que dice Java Platform). En ese combo box van a estar varios JDKs (En mi caso dos JDKs, el de 64 bits que ya tenía al principio, y el de 32 bits que acabo de agregar ahora último). Pero el JDK que está seleccionado por defecto es el de 64 bits, por eso elegimos el otro JDK (el de 32 bits). Puede ser que inmediatamente salga una ventana con título "Change Java Platform" y dentro un mensaje que empieza con un texto como "Incompatible Source Level Value 1.7". Simplemente le das clic al botón Change platform y luego Ok.

Una vez echo esto, trata de volver a ejecutar tu aplicación y me cuentas cómo te fue.


Título: Re: ¿No se encuentra origen de datos?
Publicado por: alvifa en 16 Noviembre 2012, 19:54 pm
Hola theluigy13etv,

Muchisimas gracias por la ayuda pude solucionar este problema gracias a su explicacion detallada.

Saludos,


Título: Re: ¿No se encuentra origen de datos?
Publicado por: gabox25 en 20 Abril 2013, 11:42 am
muchisimas gracias... excelente ayuda  :D