Ir al contenido principal

Ejemplo básico de MySQL con Java


Una vez instalado MySQL, descargado el driver para java de MySQL y con una base de datos y una tabla creada en MySQL, vamos a hacer un pequeño programa en java que nos permita conectarnos a la base de datos MySQL y consultar la tabla que hemos creado.

Instalar el Driver

En nuestro programa java, todos los import que necesitamos para manejar la base de datos están en java.sql.*. Puesto que casi todas los métodos relativos a base de datos pueden lanzar la excepción SQLException, meteremos todo nuestro programa en un try-catch.

Además, necesitamos la clase org.gjt.mm.mysql.Driver que viene con el driver de MySQL. Por ello, en nuestro CLASSPATH o incluido en nuestro proyecto con nuestro IDE favorito, debemos incluir el jar que contiene el driver MySQL (mysql-connector-java-3.1.7-bin.jar) o la versión más moderna y compatible con la versión de nuestro servidor de MySQL.

Lo primero que tenemos que hacer es asegurarnos que el Driver se inicializa y se registra, para ello

try
{
Class.forName("com.mysql.jdbc.Driver");
} catch (Exception e)
{
e.printStackTrace();
}

Establecer la conexión con la base de datos

Debemos tener el servidor de MySQL arrancado. Si hemos instalado y dejado esa opción como estaba, cada vez que encendamos el ordenador, se arrancará el servidor de MySQL, por lo que no tenemos que preocuparnos por ello.

El servidor de MySQL abre por defecto el puerto 3306 para aceptar conexiones de posibles clientes, de programas que quieran conectarse y acceder a la base de datos. Nuestro programa java, si quiere consultar la tabla de base de datos que hemos creado, deberá conectarse a este servidor.

Para establecer la conexion, la clase DriverManager tiene métodos getConnection(). Usaremos uno de ellos

// Establecemos la conexión con la base de datos.
Connection conexion = DriverManager.getConnection ("jdbc:mysql://localhost/prueba","root", "la_clave");

El primer parámetro del método getConnection() es un String que contiene la url de la base de datos:

  • jdb:mysql porque estamos utilizando un driver jdbc para MySQL, que es el que nos hemos bajado.
  • localhost porque el servidor de base de datos, en mi caso, está en el mismo ordenador en el que voy a correr el prorama java. Aquí puede ponerse una IP o un nombre de máquina que esté en la red.
  • prueba es el nombre de la base de datos que he creado dentro de mysql. Se debe poner la base de datos dentro del servidor de MySQL a la que se quiere uno conectar. Es el nombre que pusimos cuando desde SQL hicimos create database prueba;

Los otros dos parámetros son dos String. Corresponden al nombre de usuario y password para acceder a la base de datos. Al instalar MySQL se crea el usuario root y se pide la password para él. Como no hemos creado otros usuarios, usaremos este mismo.

Si todo va bien, en conexion tendremos nuestra conexión a la base de datos.

Esta conexión es en realidad un socket entre java y la base de datos, aunque para nosotros es transparente. Lo que sí es importante, es saber que si varios hilos comparten esta conexión, deben usarla sincronizadamente. Si no se hace así, los mensajes que van por el socket se pueden entremezclar y los hilos pueden leer cachos de mensaje destinados al otro hilo. Otra opción es que cada hilo cree su propia conexión. Finalmente, la mejor opción de todas si nuestra aplicación va a tener varios hilos intentando acceder a la base de datos, es usar un Pool de conexiones.

Realizar una consulta

Para realizar cualquier acción sobre la base de datos (consulta, insertar nuevos registros, modificar los existentes o borrar), necesitamos una clase Statement. Para obtenerla, se le pide dicha clase a la conexión. La forma de hacerlo, para una consulta, es la siguiente:

// Preparamos la consulta
Statement s = conexion.createStatement();
ResultSet rs = s.executeQuery ("select * from persona");

La parte de createStatement() no tiene ningú secreto, salvo que puede lanzar una excepción que hay que capturar.

El Statement obtenido tiene un método executeQuery(). Este método sirve para realizar una consulta a base de datos.

  • El parámetro que se pasa en un String en el que está la consulta en lenguaje SQL. No hace falta terminarlo con punto y coma. En nuestro caso "select * from persona". siendo persona el nombre que hemos puesto a la tabla en la base de datos.
  • El resultado nos lo devuelve el método como un ResultSet. Este ResultSet no es más que una clase java similar a una lista en la que está el resultado de la consulta. Cada elemento de la lista es uno de los registros de la base de datos. En realidad, ResulSet no contiene todos los datos, sino que los va consiguiendo de la base de datos según se van pidiendo. Por ello, el método executeQuery() puede tardar poco, pero el recorrer los elementos del ResultSet no es tan rápido. De esta forma se evita que una consulta que dé muchos resultados tarde mucho tiempo y llene la memoria del programa java.

Leer los resultados

El ResultSet contiene dentro los registros leidos de la base de datos. Inicialmente, tal cual nos lo devuelve el Statement.executeQuery(), tiene internamente un "puntero" apuntando justo delante del primer registro. El método next() del ResultSet hace que dicho puntero avance al siguiente registro, en este caso, al primero. Si lo consigue, el método next() devuelve true. Si no lo consigue (no hay siguiente registro que leer), devuelve false.

Por tanto, una forma de ir leyendo los registros en meternos en un while.

// Recorremos el resultado, mientras haya registros para leer, y escribimos el resultado en pantalla.
while (rs.next())
{
System.out.println (rs.getInt (1) + " " + rs.getString (2)+ " " + rs.getDate(3));
}

Una vez que el "puntero" está apuntando a un registro, los métodos getInt(), getString(), getDate(), etc nos van devolviendo los valores de los campos de dicho registro. Podemos pasar a estos métodos un índice (que comienza en 1) para indicar qué columna de la tabla de base de datos deseamos. También podemos usar un String con el nombre de la columna (tal cual está en la tabla de base de datos).

Es responsabilidad nuestra saber qué tipo de dato hay en cada columna, aunque si nos equivocamos y RecordSet es capaz de hacer la conversión, la hará por nosotros. Por ejemplo, en cualquiera de los campos anteriores podemos pedir un getString() y nos devolveran los números como String y la fecha como String.

También podemos usar getObject(), y el RecordSet nos devolverá el Object más adecuado para el tipo de campo que pedimos.

Cerrar la conexión

Una vez que terminamos de usar la conexión, se debería cerrar, o bien terminar el programa, con lo que se cierra automáticamente.

// Cerramos la conexion a la base de datos.
conexion.close();

El ejemplo

En PruebaMySQL.java tienes el ejemplo completo. Debes quitarle la extensión txt y meterlo en un árbol de directorios que sea chuidiang\ejemplos\base_datos

Vamos ahora a ver ahora cómo meter los resultados de la consulta en un JTable.

Comentarios

Jordi Rubio ha dicho que…
Hola muy buenas, soy nuevo en el mundo del java, y estoy empezando a probar cosas; mi pregunta es:

¿Como puedo poner imagenes aleatorias de una base de datos a un programa java, y que cada una de ellas tenga una información enlazada?

Se que es un poco raro, pero si pudieras respondermelo me seria de gran ayuda.

Att.
Jordi

Entradas populares de este blog

Cómo particionar un disco duro en Windows usando herramientas integradas del sistema

¿Qué es una partición de disco? Una partición es una división lógica de un disco duro físico. Cada partición funciona como si fuera un disco independiente: puede tener su propia letra (C:, D:, E:), sistema de archivos y propósito. Ejemplos de uso comunes: Separar Windows de documentos personales Crear una partición exclusiva para respaldos Organizar información por áreas (trabajo, multimedia, proyectos) Antes de comenzar: recomendaciones importantes Antes de modificar particiones, ten en cuenta lo siguiente: 🔒 Haz copia de seguridad de la información importante ⚡ Evita realizar el proceso durante cortes de energía 🛑 No interrumpas el proceso una vez iniciado 💾 Asegúrate de tener espacio libre suficiente en el disco Aunque Windows es bastante seguro en este proceso, cualquier cambio en discos conlleva riesgos. Herramienta principal: Administración de discos Windows incluye la herramienta Administración de discos , que permite: Reducir volúmenes ...

Adobe Photoshop CC 2018 19.1.6.5940 (Español) #Descarga

Descarga : MEGA: 32bits / 64 bits http://j.gs/BmM9 Clave :  http://j.gs/BmMB ------------------- Otros enlaces: ------------------- Google Drive 64 Bits: http://j.gs/Blyw 32 Bits: http://j.gs/Blz3 MEGA 64 Bits: http://j.gs/Blz9 32 Bits: http://j.gs/Blz7 Clave para descomprimir: http://j.gs/6505620/clave Adobe Photoshop CC 2018  Programa  Full  de editor de gráficos rasterizados en su  ultima versión  y usado principalmente para el retoque de fotografías y gráficos, su nombre en español significa literalmente “taller de fotos” y esta disponible para  descargar  desde esta pagina. Adobe Photoshop  32 bits  y la versión de  64 bits  es líder mundial en el mercado de aplicaciones de edición de imágenes, y domina este sector de tal manera que su nombre es ampliamente empleado como sinónimo para la edición de imágenes en general. Una de las mejores aplicaciónes de edición de imágene...

SolidWorks 2015 SP3.0 Multilenguaje (Español), Modelado Avanzado con Sistemas CAD + Descarga

SolidWorks 2015 SP3.0 Multilenguaje ISO | 8.62 GB | Spanish Incl. | Medicina Incl. | Windows 7/8/8.1 x64 |  Descarga:  http://adf.ly/1Hf1tU SolidWorks le brinda opciones de software de CAD en 3D, simulación de diseño y administración de datos de productos, además de software de documentación de productos. No importa el tamaño de su empresa: siempre puede tener las herramientas precisas que necesita para diseñar mejores productos. Software de CAD en 3D El software de diseño en 3D de SolidWorks lo ayuda a diseñar mejores productos, más rápido. Cuando tenga una idea para un producto excelente, contará con las herramientas para diseñarlo en menos tiempo y a un costo más bajo. Estas son algunas de las funciones incluidas: Simulación de diseño Con las eficaces herramientas de simulación de diseño de SolidWorks®, fácilmente puede someter sus diseños a las mismas condiciones en las que se verán en el mundo real. Mejore la calidad de sus productos al mismo tiem...