Establecer conexión con base de datos desde java

De ChuWiki

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.

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