Conexión Fallida

Tengo el siguiente código para conectarme a mi base de datos Mysql:
try{
        Class.forName("com.mysql.jdbc.Driver");
        conexion = DriverManager.getConnection("jdbc:mysql://localhost:3306/jaja","root","");
        st=conexion.createStatement();
        ResultSet rs=st.executeQuery("select descripcion from tbltpo_doc_afil;");
while(rs.next()){
            txtnum_doc.addItem(rs.getObject(1));
            cmbnum_doc2.addItem(rs.getObject(1));
            txtnum_doc3.addItem(rs.getObject(1));
            } 
        rs.close();
        st.close();
        conexion.close();
  }
catch(Exception ee){
    JOptionPane.showMessageDialog(null, ee.getMessage(),"Conexion Fallida",JOptionPane.ERROR_MESSAGE);
}
Cuando ejecuto mi Aplicación en netbeans todo sale perfectamente bien, pero cuando creo el jar y lo ejecuto me lanza un error con el nombre del driver "com.mysql.jdbc.Driver"
¿Por qué en netbeans si funciona y mi jar no?
¿Qué estoy haciendo mal y que debo hacer?

1 respuesta

Respuesta
1
El error que tienes es que no encuentra el jar del driver jdbc de mysql, cuando ejecutas tu programa en el netbeans el mismo crea automáticamente el classpath necesario para referenciar el jar de mysql, cuando compilas y creas tu jar, tu tienes que crear este classpath de forma manual.
Lo único que tienes que hacer para que tu aplicación funcione fuera de netbeans es referenciar el jar del jdbc de mysql dentro de tu classpath.
Soy nuevo en esto,¿Cómo agrego el el jar del driver al classpath?
¿Cómo estas tu jar, usas ant?.
Independientemente de tu respuesta, una forma fácil es añadir el classpath es cuando ejecutas tu programa, normalmente haces esto:
java -jar miapp.jar
Para añadir el classpath dentro de esa linea de invocación harías algo así:
java -classpath /libs/mysql.jar.... -jar miapp.jar
Me dice "unable to access" y el nombre de mi jar,¿qué otras formas hay de hacerlo?
¿Me puedes mandar por favor la linea que pusiste para arrancar tu app?.
¿Cómo estas creando el jar?, ¿Usas ant o lo generas desde la linea de comandos?
genero el jar desde netbeans y agrego el jar del driver colocandolo en la carpeta C:\Program Files\Java\jdk1.6.0_13\jre\lib\ext y asi netbeans me permite utilizarlo
En cuanto a ant, no se que es
Ah ok, al agregar el driver al directorio del jre automáticamente lo pones disponible para ser usado sin necesidad de un classpath (no es muy común poner un driver ahí pero funciona y suele hacerse). ¿Cómo estas ejecutando tu aplicación?, ¿Lo haces desde la linea de comandos?
Cuando genero el jar, hago doble click sobre el
Ok, es posible que windows este usando un jre diferente al que esta usando netbeans, ¿me podrías pegar cual es la excepción que tira tu programa al iniciarlo?.
También intenta esto, abre una linea de comandos y navega hasta donde tienes tu jar generado y pon esto
C:\Program Files\Java\jdk1.6.0_13\jre\bin\java -jar [nombre de tu jar].jar
Intente sacar el driver de la carpeta ext y agregarlo desde netbeans haciendo click con el botón decho sobre libraries luego add jar/folder... de esa forma cuando generé el jar apareció junto a el una carpeta llamada lib y dentro de ella apareció el jar del driver.
Luego de eso el jar funciona perfectamente sin netbeans
¿Por qué ahora si funciona?
Debido al classpath, cuando tu creas un jar dentro de ese jar va un archivo que se llama manifiesto, básicamente este archivo "configura" el jar, es decir cual es la clase que contiene el main, establecer el classpath y muchas otras cosas que pueden ir ahí. Netbeans crea este archivo por ti, y se basa en tu configuración del proyecto para crearlo, así que cualquier cosa que tu tengas añadida al proyecto sera puesta disponible al momento de generar el jar, como en tu caso establecer correctamente el classpath para referenciar el jar de mysql.
Es bueno que te familiarices en que es un jar y como se crea y lo que contiene, en realidad un jar es un archivo comprimido zip pero con la extensión renombrada. Netbeans te hace muchas cosas automáticas pero en el momento de algún error te es muy útil saber que es lo que hace para que puedas corregirlo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas