Conexión JDBC a Microsoft Access sin configurar ODBC: Ejemplo en Java
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.JdbcOdbcDriverse registra conClass.forName. Este driver fue eliminado en Java 8, por lo que requiere versiones anteriores del JDK. - Consultas SQL: se ejecutan mediante
Statementy los resultados se recorren con unResultSet. - Metadatos:
DatabaseMetaDatapermite 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,StatementyConnectionuna 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.