Comunicar Java con MySQL es una de las principales dudas que los principiantes en Java solemos tener. El siguiente post pretende ser una guía para aquellos que desean comunicar sus aplicaciones en Java con bases de datos en MySQL alojadas localmente. Se muestra, al final del post, como hacer una consulta e imprimir los registros de la base de datos en la consola de Java.
En aportes anteriores he mostrado como crear una base de datos en MySQL con XAMPP. De hecho, aquí les traigo el video que hice en aquella ocasión:
Dentro voy a colocar una tabla llamada Registro con 3 columnas.
Ahora voy a introducir un par de registros a la base de datos con mi información y la de mi perro.
Ahora vamos a crear la aplicación en Java. Vamos a necesitar el driver JDBC que es el que nos permite hacer la conexión con una base de datos MySQL. El driver lo podemos descargar del siguiente enlace:
Crearemos un proyecto llamado MySQL_Test. Dentro agregaremos una clase llamada MySQL.
Dentro de la clase MySQL vamos a colocar la siguiente programación.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
package mysql_test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.swing.JOptionPane; public class MySQL { Connection conexion = null; Statement comando = null; ResultSet registro; public Connection MySQLConnect() { try { //Driver JDBC Class.forName("com.mysql.jdbc.Driver"); //Nombre del servidor. localhost:3306 es la ruta y el puerto de la conexión MySQL //panamahitek_text es el nombre que le dimos a la base de datos String servidor = "jdbc:mysql://localhost:3306/panamahitek_text"; //El root es el nombre de usuario por default. No hay contraseña String usuario = "root"; String pass = ""; //Se inicia la conexión conexion = DriverManager.getConnection(servidor, usuario, pass); } catch (ClassNotFoundException ex) { JOptionPane.showMessageDialog(null, ex, "Error en la conexión a la base de datos: " + ex.getMessage(), JOptionPane.ERROR_MESSAGE); conexion = null; } catch (SQLException ex) { JOptionPane.showMessageDialog(null, ex, "Error en la conexión a la base de datos: " + ex.getMessage(), JOptionPane.ERROR_MESSAGE); conexion = null; } catch (Exception ex) { JOptionPane.showMessageDialog(null, ex, "Error en la conexión a la base de datos: " + ex.getMessage(), JOptionPane.ERROR_MESSAGE); conexion = null; } finally { JOptionPane.showMessageDialog(null, "Conexión Exitosa"); return conexion; } } } |
Esta clase se encarga de iniciar la conexión con la base de datos. Es importante establecer el servidor, nombre de la base de datos, nombre de usuario y contraseña.
En el caso de las bases de datos locales, el servidor es localhost y el puerto 3306. En bases de datos remotas se utiliza la IP del servidor donde se encuentra alojada la base de datos.
Ahora vamos a probar la conexión.Se debe haber agregado el driver JDBC. En el método principal de la clase MySQL_test se coloca el siguiente código:
1 2 3 4 |
public static void main(String[] args) { MySQL db = new MySQL(); db.MySQLConnect(); } |
Al ejecutar el programa, se obtiene el siguiente resultado.
Debemos tener en cuenta que para que esto funcione, debemos tener XAMPP corriendo e iniciar los servidores Apache y MySQL.
Vamos a llevar a cabo una consulta para introducirnos un poco más en lo que es la programación con MySQL.
Vamos a hacer una lectura sobre los registros de la base de datos, que son 2 (mi información y la de Golden).
Vamos a modificar el método Main de la clase MySQL_Test. Colocamos lo siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
public static void main(String[] args) { try { MySQL db = new MySQL(); db.MySQLConnect(); /* Se establece el nombre de la base de datos que contiene la información que se quiere consultar */ String NombreDB = "Registro"; /* Se establece la consulta que se desea hacer. Select se encargará de seleccionar todos los datos (representado por *) desde (FROM) la base de datos llamada "Registro" */ String Query = "SELECT * FROM " + NombreDB; /* Se crea una declaración y se establece el Query que se desea ejecutar */ db.comando = db.conexion.createStatement(); db.registro = db.comando.executeQuery(Query); /* Se imprimen los registros que estén guardados en la base de datos */ while (db.registro.next()) { System.out.println("Nombre: " + db.registro.getString(1) + "\nApellido: " + db.registro.getString(2) + "\nEmail: " + db.registro.getString(3)); System.out.println("------------------------------------------"); } } catch (SQLException ex) { Logger.getLogger(MySQL_Test.class.getName()).log(Level.SEVERE, null, ex); } } |
El resultado obtenido debe ser el siguiente.
Espero que la información suministrada sea de utilidad para ustedes. Saludos.
Todo bien, pero tuve un problema con la ultima linea:
catch (SQLException ex){
Logger.getLogger(MySQL_Test.class.getName()).log(Level.SEVERE, null, ex);
}
No me deja compilar
Te recomiendo mi nuevo post sobre este tema: https://panamahitek.com/los-7-pasos-seguir-para-el-manejo-de-mysql-con-java/
disculpa soy nuevo en netbeans…te cuento q tengo un pequeño problema con la conexion, mi proyecto corre pero tarda mucho en responderme, y me muestra una ventana de errores al final(adjunto la captura de pantalla), cierro esa ventana y me muestra la pequeña venta de conexion exitosa https://uploads.disquscdn.com/images/170dc6bc8789018079f8c815382d23125ac602a1d85831d32d581e6932e5ee93.png
Parece un problema con el driver de JDBC o algo con un trycatch. Comparte tu código a ver que será
//este es mi codigo de la clase Mysql, he cambiado el puerto a 8080 por que el 80
//ya lo tenia ocupado
package test_mysql;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;
public class Mysql {
Connection conexion = null;
Statement comando = null;
ResultSet registro;
public Connection MySQLConnect() {
try {
//Driver JDBC
Class.forName(«com.mysql.jdbc.Driver»);
//Nombre del servidor. localhost:3306 es la ruta y el puerto de la conexión MySQL
//panamahitek_text es el nombre que le dimos a la base de datos
String servidor = «jdbc:mysql://localhost:8080/ProyectoUmss»;
//El root es el nombre de usuario por default. No hay contraseña
String usuario = «root»;
String pass = «»;
//Se inicia la conexión
conexion = DriverManager.getConnection(servidor, usuario, pass);
} catch (ClassNotFoundException ex) {
JOptionPane.showMessageDialog(null, ex, «Error en la conexión a la base de datos: » + ex.getMessage(), JOptionPane.ERROR_MESSAGE);
conexion = null;
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, ex, «Error en la conexión a la base de datos: » + ex.getMessage(), JOptionPane.ERROR_MESSAGE);
conexion = null;
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, ex, «Error en la conexión a la base de datos: » + ex.getMessage(), JOptionPane.ERROR_MESSAGE);
conexion = null;
} finally {
JOptionPane.showMessageDialog(null, «Conexión Exitosa»);
return conexion;
}
}
}
Creo que en el cambio del puerto es donde está el problema
El problema es que no se puede comunicar con el servidor SQL verifica que el nombre de la base de datos, el usuario y el password sean los mismos que las variables si no funciona verifica que mysql esta a la escucha por el puerto 3306 ejecutando la siguiente sentencia SQL en phpmyadmin:
SHOW VARIABLES WHERE Variable_name IN (‘hostname’, ‘port’);
mira el siguiente enlace para aclarar mas dudas
https://andalinux.wordpress.com/2013/05/29/obtener-puerto-e-ip-servidor-mysql-usando-sql/
excelente tu post, solo falto decir que hay que agregar el jar de mysql https://dev.mysql.com/downloads/file/?id=13460
Nunca he dicho ser experto
Gracias me sirvio mucho
Me ayuda bastante a resolver mis dudas muchas gracias