Conexión JDBC a Microsoft Access sin configurar ODBC: Ejemplo en Java

Otras materias4,92 KB

JDBC con bases de datos de Microsoft Access, leyendo directamente un archivo *.mdb sin configurar el origen de datos en el panel ODBC

El siguiente programa en Java muestra cómo conectarse a una base de datos de Microsoft Access (archivo .mdb) mediante JDBC, utilizando directamente la ruta física del archivo y sin necesidad de configurar un origen de datos (DSN) en el panel de control ODBC.

Código fuente

import java.sql.*;

// CLASE PRINCIPAL
public class Access_sin_odbc
{

   // MÉTODO PRINCIPAL DE ENTRADA AL PROGRAMA
   public static void main(String[] args)
   {
     try
     {
       System.out.println("\nJDBC Access");
       System.out.println("===========");


       // cadena de conexión con la ruta física a la BD
       String db = "D:\\Carpeta\\Subcarpeta\\AccessBD_1.mdb";
       // si la BD está en la carpeta de la aplicación Java
       //String db = "AccessBD_1.mdb";
       String url = "jdbc:odbc:MS Access Database;DBQ=" + db;

       // registrar el driver JDBC usando el cargador de clases Class.forName
       Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
       System.out.println("\nEstableciendo conexión...");
       Connection con = DriverManager.getConnection (url, "", "");
       System.out.println("\nConexión establecida con: \"" + db + "\".");
       System.out.println("");

       // ejecutar una sentencia SQL SELECT
       Statement select = con.createStatement();
       ResultSet nombres = select.executeQuery("SELECT TOP 8 * FROM Tabla1 ORDER BY Id");
       System.out.println("Mostrar los 8 primeros registros:");
       System.out.println("");
       System.out.println("\tNOMBRE");
       System.out.println("");
       int col = nombres.findColumn ("Nombre");
       boolean seguir = nombres.next();
       while (seguir) {
         System.out.println ("\t" + nombres.getString(col));
       seguir = nombres.next(); }

       System.out.println("");

       // liberar recursos
       nombres.close();
       select.close();

       // obtener información acerca del gestor de BBDD y de las BBDD

       /* La interfaz ResultSet representa un conjunto de datos resultado de una consulta SQL.
       * Para acceder a los registros se emplea un cursor que inicialmente apunta antes del primer registro.
       * Para avanzar por los registros se emplea el método ResultSet.next(). */
       DatabaseMetaData dm = null;
       ResultSet rs = null;
       dm = con.getMetaData();
       rs = dm.getCatalogs();

       System.out.println("Información sobre el Driver:\n");
       System.out.println("\tDriver Name: "+ dm.getDriverName());
       System.out.println("\tDriver Version: "+ dm.getDriverVersion ());
       System.out.println("\nInformación sobre el servidor de BD:\n");
       System.out.println("\tDatabase Name: "+ dm.getDatabaseProductName());
       System.out.println("\tDatabase Version: "+ dm.getDatabaseProductVersion());
       System.out.println("\nBases de datos en esta carpeta:\n");
       // entero para contar por el catálogo de BD
       int n = 1;
       while(rs.next()){
         // ResultSet.getString() devuelve la ruta a las BD del catálogo
         System.out.println("\t" + n + " - " + rs.getString(1));
         n+=1;
       }

       // liberar recursos
       rs.close();

       con.close();

       System.out.println("\nConexión con: \"" + db + "\" cerrada.\n\n");

     }
     catch (Exception pollo)
     {
       //System.out.println("\nError al conectar con la BD: " + pollo.getMessage() + "\n");
       System.out.println("\nError al realizar alguna acción del programa.\n\n");
     }
   }

}

Puntos clave del programa

  • Cadena de conexión: la URL jdbc:odbc:MS Access Database;DBQ= indica al driver la ruta física del archivo .mdb.
  • Driver JDBC-ODBC: sun.jdbc.odbc.JdbcOdbcDriver se registra con Class.forName. Este driver fue eliminado en Java 8, por lo que requiere versiones anteriores del JDK.
  • Consultas SQL: se ejecutan mediante Statement y los resultados se recorren con un ResultSet.
  • Metadatos: DatabaseMetaData permite obtener información sobre el driver, el gestor de base de datos y los catálogos disponibles.
  • Liberación de recursos: es buena práctica cerrar ResultSet, Statement y Connection una vez utilizados.

Nota sobre compatibilidad

Dado que el puente JDBC-ODBC ya no está disponible en versiones recientes de Java, para proyectos actuales se recomienda utilizar el driver nativo UCanAccess o el Access Database Engine de Microsoft con un driver JDBC compatible.

Descargar

PDF Word HTML