Buenas noches.
Me encuentro desarrollando un pequeño módulo en Java que tiene la función de importar la información procedente de un archivo de excel a una base de datos de Microsoft Access. Para ello, estoy usando las librerías de Apache POI para leer el archivo en Excel, y ODBC para realizar la conexión con la Base de datos.
Al ejecutar el código, sólo logro insertar la primer fila del libro en excel, para después obtener la siguiente excepcción:
java.sql.SQLException: General error
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6986)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
at sun.jdbc.odbc.JdbcOdbcStatement.executeUpdate(JdbcOdbcStatement.java:253)
El código que se encarga de esta función es el siguiente:
package Prototipo;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.sql.ResultSet;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
/**
* @author Pedro Ramos Millán-Universidad Tecnológica de Tecámac
*/
public class InsertaMdb {
public static void main(String[]ar){
try{
Connection conn=Controlador.Conexion.conectar("D:\\Proyecto HRAEZ\\SAEH1415.mdb");
PreparedStatement psta=null;
FileInputStream fis=new FileInputStream("C:\\Users\\equipo\\Desktop\\pruebaMédicos.xlsx");
XSSFWorkbook wb=new XSSFWorkbook(fis);
XSSFSheet sheet=wb.getSheetAt(0);
for(int i=0;i<sheet.getLastRowNum();i++){
XSSFRow row=sheet.getRow(i);
String insertar="insert into medicos(clues,cedula,nombremed)values(?,?,?)";
psta=conn.prepareStatement(insertar);
psta.setString(1, row.getCell(0).toString());
psta.setString(2, ""+row.getCell(1).toString());
psta.setString(3, ""+row.getCell(2).toString());
int xx=psta.executeUpdate();
conn.commit();
if(xx==1){
System.out.println("Registro Insertado Correctamente="+i);
}
else{
System.out.println(xx);
}
}
conn.close();
}catch(Exception er){
er.printStackTrace();
}
}
}
Para hacer la conexión con la Base de datos de Access, Uso un jFileChooser que se encarga de recupera la ruta de la base de datos del equipo, y que es recibida en una variable de tipo String como se ve a continuación:
package Controlador;
import java.sql.Connection;
import java.sql.DriverManager;
public class Conexion {
public static Connection conectar(String xPath) {//xPath es la ruta de la base de datos
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + xPath;
Connection conn = DriverManager.getConnection(url, "", "");
System.err.println("Conexión Exitosa :D");
return conn;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
De antemano, muchísimas gracias por su atención. Que tengan una excelente noche.