Establecer conexión con base de datos desde java
He metido todos los artículos de esta wiki y de http://chuidiang.org relativos a Java y JDBC en un pdf Libro JDBC Java. A través del enlace puedes comprarlo si tienes interés.
Si queremos conectarnos con nuestro programa Java a una base de datos para realizar consultas y modificaciones, debemos seguir los siguientes pasos:
Conseguir el Driver[editar]
Lo primero es conseguir el jar con el driver para nuestra base de datos. Debemos descargarnos dicho jar y añadirlo a nuestro Classpath o a las librerías de nuestro proyecto en el IDE que usemos.
- MySQL : Se puede descargar de http://dev.mysql.com/downloads/connector/j/ aunque siempre debemos fijarnos que la versión del conector es compatible con la de nuestro servidor MySQL http://dev.mysql.com/doc/refman/5.1/en/connector-j-versions.html
- Oracle : Se puede descargar de http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html eligiendo la versión compatible con nuestra base de datos. Hay varias versiones de driver con más o menos cosas. Para un uso "normal", debemos bajarnos la classesXX.zip o la ojdbcXX.jar, sin "apellidos".
- PostgreSQL: Se puede descargar de http://jdbc.postgresql.org/download.html y nuevamente teniendo en cuenta la versión de nuestro servidor de base de datos.
- Access : Usaremos el odbc que viene con java (versión de Sun), así que no necesitamos nada especial.
- HSQLDB : La base de datos HSQLDB es un jar que viene con el conector, así que tanto para arrancar la base de datos como para conectarnos con ella, necesitamos el jar completo http://sourceforge.net/projects/hsqldb/files/
Registrar el Driver en java[editar]
El siguiente paso, ya dentro de nuestro código java, es registrar el Driver. Normalmente eso se hace automáticamente sin más que "mencionar" el nombre de la clase con el Driver. Es por ello habitual registrarlo haciendo un Class.forName("paquete.Driver")
// MySQL
Class.forName("com.mysql.jdbc.Driver");
// Oracle
Class.forName("oracle.jdbc.driver.OracleDriver");
// PostgreSQL
Class.forName("org.postgresql.Driver");
// HSQLDB
Class.forName("org.hsqldb.jdbcDriver");
// Access
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
En las versiones modernas de los drivers, esta llamada no es necesaria. Los driver JDBC4 modernos son capaces de auto registrarse en el arranque de la máquina virtual.
Establecer la conexión[editar]
Ahora ya sólo queda establecer la conexión. Para ello se usa DriverManager.getConnection()
, pasando una URL de conexión a la base de datos y los parámetros de usuario/password si son necesarios
// MySQL
Connection conexion = DriverManager.getConnection(
"jdbc:mysql://servidor:3306/database",
"usuario",
"password");
// Oracle
Connection conexion = DriverManager.getConnection(
"jdbc:oracle:thin:@servidor:1521:database",
"usuario",
"password");
// Access
Connection conexion = DriverManager.getConnection(
"jdbc:odbc:nombre_fuente_datos");
// PostgreSQL
Connection conexion = DriverManager.getConnection(
"jdbc:postgresql://servidor:5432/database",
"usuario",
"password");
Donde "servidor" es el nombre o ip de la máquina/pc donde corre nuestro servidor de base de datos y "database" es el nombre de la base de datos a la que queremos conectarnos. El número que aparece es el puerto al que atiende nuestro servidor. Los valores por defecto para el puerto en cada base de datos son los que aparecen en el código y podemos no ponerlos si son esos valores por defecto.
auto commit[editar]
Por defecto las conexiones que obtengamos de base de datos por este mecanismo son "auto commit". Eso quiere decir que cada transacción que hagamos con ella (una inserción, borrado o modificación), se hará el commit correspondiente a base de datos automáticamente. No hay en principio forma de volverse atrás.
Si no nos interesa este comportamiento, podemos llamar al método setAutoCommit(false)
, de esta forma, los commit()
debemos hacerlos nosotros manualmente llamando al método commit()
, o bien retractarnos de todo lo hecho llamando al método rollback()
.
Connection conexion = DriverManager.getConnection(
"jdbc:mysql://servidor:3306/database",
"usuario",
"password");
conexion.setAutoCommit(false);
// Aqui hacemos varios insert, update, delete
if (todoCorrecto) {
// si todo va bien y queremos "salvar" todo en base de datos
conexion.commit();
} else {
// si algo ha ido mal y queremos deshacer los cambios
conexion.rollback();
}
Continúa ... Pool de conexiones