Buenos días.
He finalizado con la realización de un proyecto informático que consiste en la importación de archivos en Excel, a una base de datos me Microsoft Access, usando APACHE POI para el manejo de los archivos xlxs, y de JDBC-ODBC para la conexión con los archivos MDB(de acess), Para el mismo, he usado NetBeans 8.0.2 como entorno de desarrolo integrado.
Durante la ejecución del proyecto informático en el IDE, se aprecia un correcto funcionamiento durante la importación, validación de campos, generación de LOGS y salida de archivos de historial, así como también la correcta inserción en la base de datos en Access.
Sin embargo, al realizar la compilación del proyecto en un archivo .JAR, la conexión se pierde con JDBC-ODBC, arrojándome la Excepcción
java.lang.ClassNotFoundException.
El código fuente encargado de esta conexión es el siguiente:
package Controlador;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
import javax.swing.JOptionPane;
public class Conexion {
/**
* @author Pedro Ramos Millán - Hospital Regional de Alta Especialidad de Zumpango
* @version 1.0
* Propósito: Realizar la conexión a una base de datos de Microsoft Access mediante JDBC-ODBC
*/
public static Connection conectar(String xPath) {//En este método recupero la ruta seleccionada del archivo mdb o accdb
/*Validación de archivo Access*/
String extensionBD=xPath.substring(xPath.lastIndexOf("."));//aquí recupero únicamente la extensión
if(extensionBD.equals(".mdb")||extensionBD.equals(".accdb")){//si es alguna que pertenezca a Access
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//llamamos la clase del driver
String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + xPath;//defino la ruta y el driver
Connection conn = DriverManager.getConnection(url, "", "");//obtengo la conexión de la ruta y el driver
//Connection conn=DriverManager.getConnection("jdbc:ucanaccess://"+xPath);
System.out.println("Conexión Exitosa con la base "+xPath+" (Extensión: "+extensionBD+")");
//Etapa de generación de LOG
Controlador.ClaseLog.agregar("Conexión Exitosa con la base "+xPath+" (Extensión: "+extensionBD);
Controlador.ClaseLog.generaArchivo();
//Etapa de generación de LOG
return conn;//se retorna la conexión
} catch (SQLException sql) {//Si aparece una SQLExeption
sql.printStackTrace();//imprimo traza de error, y notifico al usuario
JOptionPane.showMessageDialog(null, "La Base de datos seleccionada está dañada, no es la base de datos del SAEH, "
+ "o no se encuentras los campos necesario para insertar, favor de verificar, ","Aviso de Base de datos",0);
return null;//no retorno nada
} catch (ClassNotFoundException ex) {//Si no encuentra la clase de conexión, mensaje a usuario e impresión de traza de error
JOptionPane.showMessageDialog(null, "Error de conexión con la Base de datos","Atención BD",0);
JOptionPane.showMessageDialog(null, ex,"Error",0);
ex.printStackTrace();
return null;
}//Fin de catch
}//fin de if de extensión
else{//en caso de que ninguna de las extensiones proporcionadas sean de Access, Se notifica al usuario
JOptionPane.showMessageDialog(null, "La extensión "+extensionBD+" no es válida. "
+ "Seleccione un archivo de base de datos válido","Atención",0);
return null;//no se retorna nada
}//fin de else
}//fin de método
public static void main(String[]ar){
try {
Scanner leer=new Scanner(System.in);
Connection conn=Conexion.conectar("F:\\PRUEBAS\\SAEH1515.mdb");
Statement sta=conn.createStatement();
String sint=leer.nextLine();
boolean exec=sta.execute(sint);
conn.commit();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}//fin de clase
Como dato adicional, JDBC-ODBC NO requiere de ningún Driver o Jar adicional al proyecto para su funcionamiento dentro de NETBEANS entonces,Mi pregunta es:
¿Es necesaria la configuración de alguna característica en NETBEANS para compilar el archivo de salida?
De antemano, agradezco su amable atención, comunidad de Entre Desarrolladores, Saludos