JDBC: bases de datos desde lenguaje Java
Qué es JDBC
JDBC (Java DataBase Connectivity = conectividad
java a bases de datos) es un conjunto
de clases e interfaces escritos en Java que ofrecen una API completa para la programación
de bases de datos de diferentes proveedores (Microsoft SQL Server, Oracle,
MySQL, Interbase, Microsoft Access, IBM DB2, PostgreSQL, etc...) usando
instrucciones SQL (Structured Query
Language = Lenguaje estructurado de consultas).
JDBC realiza varias funciones:
- conecta con la base de datos (BD en adelante); la BD puede ser local
(en nuestro PC) o remota (en otro PC)
- envía las sentencias SQL
- manipula los registros de la BD
- recoge el resultado de la ejecución de las sentencias SQL
JDBC vs ODBC
JDBC difiere de ODBC (Open DataBase Connectivity
= conectividad abierta a bases de datos), API de Microsoft muy utilizada
para acceder a BD de diferentes proveedores desde múltiples plataformas:
- ODBC está escrito en C
- el gestor de drivers ODBC y el propio driver han de ser instalados en todos
los ordenadores
- JDBC está escrito en Java y permite obtener aplicaciones completas en Java
(100% pure java)
- usando ODBC en BD grandes, el rendimiento puede disminuir al convertir llamadas
Java a C y viceversa
Clases y métodos de JDBC
JDBC utiliza los mismos métodos y clases independientemente del driver usado
para conectar al proveedor de BD, lo que cambia es el nombre del driver por lo que
es bastante sencillo modificar aplicaciones al cambiar de proveedor. El código genérico
de conexión a una BD es:
- Registrar el driver JDBC usando el cargador de clases Class.forName:
Class.forName ("nombre_del_driver");
- Conectar a la BD usando la interfaz Connection que abre una sesión
o conexión con la BD especificada y, mediante el método DriverManager.getConnection,
intenta seleccionar el driver apropiado de entre los que JDBC tenga registrados
en el sistema:
Connection con = DriverManager.getConnection ("BD_url", "usuario",
"password");
- Ejecutar sentencias SQL; la interfaz Statement permite ejecutar las
instrucciones SQL y devolver el resultado generado:
Statement select = con.createStatement();
- 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 y para avanzar por los registros se emplea
el metodo ResultSet.next(). ResultSet es de sólo lectura:
ResultSet nombres = select.executeQuery ("SELECT * FROM Tabla
ORDER BY Id");
Las consultas Statement tienen métodos diferentes según el tipo de instrucción
SQL empleada:
executeQuery(String sql): devuelve
un objeto ResultSet
executeUpdate(String sql): ejecuta
una instruccion de tipo INSERT, UPDATE o DELETE
- JDBC puede usar varios drivers, entre ellos los más importantes son:
- Microsoft SQL Server (se descarga desde la web de Microsoft, es un controlador
JDBC de SQL Server 2005 y de SQL Server 2000; se trata de un controlador
JDBC de Tipo 4 que proporciona conectividad de base de datos a través de
las API JDBC estándar disponibles en J2EE - Java2 Enterprise Edition:
Class.forName: com.microsoft.jdbc.sqlserver.SQLServerDriver
Connection: jdbc:microsoft:sqlserver://<HOST>:<puerto>;DatabaseName=[nombre_BD];User=[usuario];Password=[password]
- JDBC-ODBC Bridge (puente con ODBC, sirve para conectar con BD de Microsoft
Access):
Class.forName: sun.jdbc.odbc.JdbcOdbcDriver
Connection: jdbc:odbc:<ruta_a_la_BD>
La conexión con la BD de Microsoft Access puede realizarse de 2 maneras:
- configurando la BD como DSN de Sistema en el Panel de control ODBC
/* cadena de conexion: AccessBD es el nombre con
el que se ha configurado
* la conexion a la BD en el panel de control ODBC */
String url = "jdbc:odbc:AccessBD";
- usando la ruta física a la BD en la cadena de conexión (no hace
falta configurarla en el Panel de control ODBC):
// cadena de conexion con la ruta fisica a la BD
String db = "D:\\Carpeta\\Subcarpeta\\Subcarpeta\\base_de_datos.mdb";
// si la BD esta en la carpeta de la aplicacion Java se escribe
//String db = "base_de_datos.mdb";
String url = "jdbc:odbc:MS Access Database;DBQ=" + db;
- MySQL (driver MM.MySQL):
Class.forName: org.gjt.mm.mysql.Driver
Connection: jdbc:mysql://<HOST>:<puerto>/<BD>
Ejemplos de conexiones JDBC
- Ejercicio de conexión a la BD pubs (tabla authors) de SQL
Server 2000 (ejercicio de consola)
- Ejercicio de conexión a una BD de Microsoft Access (ejercicio de consola)