Conectar java con mysql

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.

Conexión de bajo nivel[editar]

Para poder conectar java con una base de datos (MySQL en este ejemplo), necesitamos el Driver o Connector de la base de datos. Este Driver puede habitualmente bajarse de la página web de la base de datos. Por ejemplo, el de MySQL se puede bajar de http://dev.mysql.com/downloads/connector/j/5.0.html

En el zip que nos bajamos hay dentro un java-mysql-connector-5.0.5-bin.jar que es el que tiene dentro del Driver. Debemos poner este jar accesible a nuestro proyecto java:

  • Poniéndolo en $JAVA_HOME/lib/ext/ y así será accesible por defecto para siempre. Esta opción no es aconsejable, puesto que este jar estará disponible para todas las aplicaciones que corramos en el ordenador, lo necesiten o no. Si no somos cuidadosos, podemos tener conflictos entre distintas versiones o con otros jar que pongamos que ahí.
  • Poniéndolo en el CLASSPATH
  • Añadiéndolo a nuestro proyecto del IDE que usemos (por ejemplo eclipse.

Una vez accesible, para conectarse a la base de datos hacemos esto

import java.sql.Connection;
import java.sql.DriverManager;
...
try
{
   Class.forName("com.mysql.jdbc.Driver");
   Connection conexion = DriverManager.getConnection("jdbc:mysql://localhost/agenda", "root", "LA_PASSWORD");
   ...

Si cuando ejecutes obtienes una excepción java.lang.ClassNotFoundException: com.mysql.jdbc.Driver es que no has colocado el jar con el conector adecuadamente en el Classpath.

Caso específico de MySQL[editar]

Si la conexión va a ser siempre con una base de datos MySQL, tenemos una forma más sencilla de establecer la conexión, usando la clase MysqlDataSource. Esta clase viene dentro del driver que nos hemos bajado y al ser específica de MySQL, no debemos proporcionarle cosas como el driver, además de que gestiona mejor la conexión con MySQL que una clase genérica. Para usar esta clase, pondremos:

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
...
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUser("usuario");
dataSource.setPassword("password");
dataSource.setDatabaseName("dedicaciones");
dataSource.setServerName("localhost");

Connection conexion = dataSource.getConnection();
...

Como vemos, basta instanciar la clase, pasarle usuario, password, base de datos y servidor donde corre MySQL. Una vez hecho, basta con pedirle la Connection cuando la necesitemos.

Pool de conexiones[editar]

Si abrimos las conexiones directamente con la base de datos, tenemos dos problemas que pueden ser importantes en aplicaciones de cierto tamaño:

  • Abrir y cerrar conexiones con base de datos suele ser costoso. Por ello no es conveniente abrir una conexión, realizar una operación y cerrarla para luego repetirlo poco después. Suele ser mejor idea dejar las conexiones abiertas y cerrarlas al final.
  • Dos hilos no pueden trabajar simultáneamente sobre una conexión. Si tenemos varios hilos y sólo abrimos una conexión compartida, debemos acordarnos de usar synchronized con la conexión, para evitar que ambos hilos accedan simultáneamente.

Todo esto nos lo podemos ahorrar si usamos un Pool de conexiones

Enlaces externos[editar]