Anteriormente escribí este mismo artículo pero para bases de datos en Oracle. En este artículo prácticamente me copio y pego para explicar paso a paso cómo realizar la conexión a MySQL en Java, así como la forma de realizar consultas a los registros existentes y ejecutar sentencias de inserción, borrado y actualización de datos.
Al final del artículo tendremos una clase que encapsulará todos los procedimientos necesarios para trabajar con la base de datos.
Obtener el driver
Como toda conexión a bases de datos en Java, necesitamos un driver (también conocido como conector) para realizar la comunicación con la base de datos, en este caso necesitaremos el de MySQL, algo así como mysql-x-x-x.jar disponible para su descarga desde el siguiente enlace:
Crear el proyecto de NetBeans
En lo particular utilizo la que a la fecha de publicación de este artículo es la versión más reciente del NetBeans: la 7.1.1. Para crear el proyecto basta con dar clic en el botón de 'Nuevo Proyecto' o ir al menú Archivo -> Nuevo Proyecto.
Al proyecto le titularemos MySQLBD, aunque solo es un nombre sugerido ya que no afecta en lo más mínimo con el comportamiento del programa. Una vez creado el proyecto el IDE nos posicionará en la clase principal del mismo y creará por sí solo el método main desde el cual ejecutaremos todos nuestros procedimientos.
Establecer la conexión a la base de datos
Lo primero que vamos a hacer es importar las clases y/o paquetes que vamos a utilizar (los llamados import’s), en este caso solamente será el que se muestra a continuación:
import java.sql.*;
Posteriormente dentro de la clase declararemos una variable privada de tipo Connection que será la que contendrá la conexión con la base de datos:
public class MySQLBD {
private Connection conexion;
.
.
Para organizar el código crearemos el get y set de conexion además del método llamado conectar() el cual se encargará de establecer a la conexión con la base de datos para que posteriormente podamos realizar los procedimientos que necesitamos. Dentro del método encerraremos la mayor parte del código dentro de un try-catch con el fin de capturar las excepciones que se puedan originar tras la ejecución del mismo.
public Connection getConexion() {
return conexion;
}
public void setConexion(Connection conexion) {
this.conexion = conexion;
}
public MySQLBD conectar() {
try {
.
.
.
} catch (Exception e) {
e.printStackTrace();
}
return this;
}
Como puedes ver, el método devuelve una instancia de la clase MySQLBD (es decir, la misma que lo contiene), esto con el fin de poder encadenar los siguientes métodos que necesitaremos y ahorrarnos una línea de código.
Ahora bien, dentro del try-catch lo primero que realizaremos será cargar el driver en la memoria y posteriormente crear una cadena con la URL de conexión a la base de datos como se muestra en el siguiente código:
Class.forName("com.mysql.jdbc.Driver");
String BaseDeDatos = "jdbc:mysql://localhost/test?user=usuario&password=123";
En la URL de la conexión debes tomar en cuenta que:
- localhost indica el host o la IP del servidor Oracle.
- test es la base de datos.
- user es el usuario con el que te vas a conectar.
- password es la contraseña.
En este momento lo único que nos falta para crear la conexión es llamar al método getConnection() del driver de la siguiente manera:
setConexion(DriverManager.getConnection(BaseDeDatos));
Puedes validar si la conexión se realizó correctamente verificando si la variable es nula:
if (conexion != null) {
System.out.println("Conexion exitosa!");
} else {
System.out.println("Conexion fallida!");
}
El método completo entonces quedaría de la siguiente manera:
public MySQLBD conectar() {
try {
Class.forName("com.mysql.jdbc.Driver");
String BaseDeDatos = "jdbc:mysql://localhost/test?user=usuario&password=123";
setConexion(DriverManager.getConnection(BaseDeDatos));
if(getConexion() != null){
System.out.println("Conexion Exitosa!");
}else{
System.out.println("Conexion Fallida!");
}
} catch (Exception e) {
e.printStackTrace();
}
return this;
}
Ejecutar sentencias en la base de datos
Ya que hemos realizado la conexión a la base de datos podemos trabajar con ella por lo cual crearemos un método a partir del cual ejecutaremos las sentencias más comunes que no nos devuelven resultados como INSERT, UPDATE, DELETE, etc.
Vamos a definir el método para que sea público y nos devuelva un valor booleano, true si se ejecuta la consulta correctamente, false si no. A su vez recibirá una cadena que contendrá la consulta SQL a ejecutar.
public boolean ejecutar(String sql) {
.
.
.
}
Posteriormente, igual como lo hicimos en el método anterior, vamos a encerrar prácticamente todo el comportamiento dentro de try-catch.
public boolean ejecutar(String sql) {
try {
.
.
.
} catch (SQLException e) {
e.printStackTrace();
return false;
}
return true;
}
Ahora definimos un objeto tipo Statement que nos ayudará a ejecutar la consulta de la siguiente manera:
Statement sentencia = getConexion().createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
sentencia.executeUpdate(sql);
Por último cerramos la sentencia para liberar recursos:
sentencia.close();
En el caso de que se presente una excepción daremos por hecho que no se realizó la ejecución correctamente, por lo tanto, sólo en ese caso retornaremos false.
El método completo luce de la siguiente manera:
public boolean ejecutar(String sql) {
try {
Statement sentencia = getConexion().createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
sentencia.executeUpdate(sql);
sentencia.close();
} catch (SQLException e) {
e.printStackTrace();
return false;
} return true;
}
Realizar consultas a la base de datos
Lo único que nos falta es consultar a la base de datos (SELECT) lo cual haremos igualmente mediante un método público que nos devuelva un objeto de tipo ResultSet e igualmente recibirá una cadena que contendrá una consulta SQL a realizar.
public ResultSet consultar(String sql) {
.
.
.
}
Lo primero que vamos a agregar es una declaración del objeto de tipo ResultSet y posteriormente encerraremos la ejecución dentro de un try-catch para capturar las excepciones que se puedan generar.
public ResultSet consultar(String sql) {
ResultSet resultado = null;
try {
} catch (SQLException e) {
e.printStackTrace();
return null;
}
return resultado;<
}
De igual manera nos apoyaremos de un objeto de tipo Statement para poder realizar la consulta.
Statement sentencia = getConexion().createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
Obtenemos el mapa de resultados a través del método executeQuery() del objeto Statement y posteriormente llamamos al método commit() de la conexión para asegurarnos que la consulta se está realizando.
resultado = sentencia.executeQuery(sql);
getConexion().commit();
En el caso de que se presente una excepción daremos por hecho que no se realizó la consulta correctamente, por lo tanto, sólo en ese caso retornaremos null.
El método completo se ve de la siguiente manera:
public ResultSet consultar(String sql) {
ResultSet resultado;
try {
Statement sentencia = getConexion().createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
resultado = sentencia.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
return null;
} return resultado;
}
Con esto tenemos completa nuestra clase que se encargará de realizar la conexión, consulta y ejecución de sentencias en la base de datos Oracle.
Probar el funcionamiento
Para verificar que todo funciona bien podemos crear una tabla en la base de datos de nombre TEST con 2 campos, IDENTIFICADOR de tipo INTEGER y DESCRIPCION de tipo VARCHAR y ejecutar lo siguiente dentro del método main:
public static void main(String[] args) {
MySQLBD baseDatos = new MySQLBD().conectar();
if (baseDatos.ejecutar("INSERT INTO TEST(IDENTIFICADOR,DESCRIPCION) VALUES(3,'TRES')")) {
System.out.println("Ejecución correcta!");
} else {
System.out.println("Ocurrió un problema al ejecutar!");
} ResultSet resultados = baseDatos.consultar("SELECT * FROM TEST"); if (resultados != null) {
try {
System.out.println("IDENTIFICADOR DESCRIPCION");
System.out.println("--------------------------------");
while (resultados.next()) {
System.out.println(""+resultados.getBigDecimal("IDENTIFICADOR")+" "+resultados.getString("DESCRIPCION"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Como es de costumbre, el proyecto de NetBeans está disponible para descargar desde el siguiente enlace:
La contraseña para descomprimir el proyecto es: http://monillo007.blogspot.com.
Tus comentarios y/o preguntas son bienvenidos.
Si el código te fue útil te invito a que me ayudes a difundirlo desde los botones sociales (Twitter, Facebook, Google+).
De igual manera puedes suscribirte al blog para que los nuevos artículos lleguen a tu bandeja de correo o lector de Feeds favorito desde los enlaces del lado derecho de la página.
GENIAL TU BLOG MUY BUENOS LOS TUTORIALES, TE FELICITO
ResponderBorrarMuchas gracias :D !
ResponderBorrarMas claro no parece posible, mil gracias.
ResponderBorrarEl enlace de arriva es para bajar MySQL, o solo es el controlador.
Si no, donde puedo bajar MySQL.
Qué tal Jh Rodas,
ResponderBorrarEl primer enlace es para descargar el driver, el último es para descargar el proyecto de NetBeans, si lo que quieres es descargar el servidor de MySQL el siguiente enlace te sirve:
:descarga: Descargar MySQL
Saludos.
Hola estoy tratando de hacer una consulta multiple en el programa NetBeans 7.1.1 (Java)... este esta conectado a una BD en MySQL, pero por alguna razon no me recoje los datos que espero... (ya lo probe en MySQL y todo bien... pero al momento de ejecutarlo en el programa no me lo toma. (Estoy usando la version de MySQL que trae el XAMPP 1.7.7)
ResponderBorraragradeceria mucho tu ayuda.
hola muy bueno tu blogs me ahn servido varios tutoriales pero en este tengo problema descarge el driver y el proyecto me encantaria que pudieras ver el error y que me puedas ayudar
ResponderBorrarrun:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1117)
at com.mysql.jdbc.MysqlIO.(MysqlIO.java:350)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2393)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2430)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2215)
at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:813)
at com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:47)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334)
at java.sql.DriverManager.getConnection(DriverManager.java:579)
at java.sql.DriverManager.getConnection(DriverManager.java:243)
at mysqlbd.MySQLBD.conectar(MySQLBD.java:30)
at mysqlbd.MySQLBD.main(MySQLBD.java:97)
Caused by: java.net.UnknownHostException: mysqld@localhost
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:866)
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1258)
at java.net.InetAddress.getAllByName0(InetAddress.java:1211)
at java.net.InetAddress.getAllByName(InetAddress.java:1127)
at java.net.InetAddress.getAllByName(InetAddress.java:1063)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:247)
at com.mysql.jdbc.MysqlIO.(MysqlIO.java:300)
... 16 more
Exception in thread "main" java.lang.NullPointerException
at mysqlbd.MySQLBD.ejecutar(MySQLBD.java:85)
at mysqlbd.MySQLBD.main(MySQLBD.java:99)
Java Result: 1
GENERACIÓN CORRECTA (total time: 0 seconds)
muy bueno tu blog hermano. Tengo una duda! mostrar un mensaje si el select no me trae resultados, es decir, al realizar el select no consigue datos con las condiciones que pido(en el select). Yo implemente lo siguiente: yo tengo un pequeño formulario y realizo el select con el contenido de los campos de texto, ahora si el usuario ingresa un numero o un texto que no esta en la base de datos el sistema me muestre un mensaje que me diga "no existen registros con esas condiciones", te muestro un pedaso del codigo:
ResponderBorrarResultSet resultado =consulta.executeQuery("Select * From Vista_Consulta Where serial='"+jTextField_Serial.getText()+"' or cod_activo='"+jTextField_NombreFisico.getText()+"'");
if(!resultado.next())
{
JOptionPane.showMessageDialog(null,"No existen registros con éstas condiciones");
}
gracias eres muy bueno explicando
ResponderBorrarQué onda man! Oye, quiero aprender a programar, pero no sé qué tengo que nomás no se me da! Qué me recomendarías para aprender a programar? Digo, sé que lo básico de aprender a hacer algoritmos, descomponer un problema en partes sencillas, aprender Orientación a Objetos y cosas así, pero por más que lo intento, no puedo aprender a programar!
ResponderBorrarMe podrías ayudar? Mi correo es paziffic.prince@gmail.com
Muchas gracias de antemano!
Hola, me gusto mucho tu post pero tengo una duda. Como puedo hacer una consulta en netbeans que dependa de lo que esta ingresando el usuario, mira tengo esta consulta y no me marca ningún error pero a la hora de mostrar dicha consulta no se ve nada.
ResponderBorrarString sql =("select descripcion,codigo_ropa,cantidad from lineas where num_pedido="+txtPedido.getText());
Por favor ayudame, gracias.
gracias por lo general no hago comentarios pero en realidad me interesa lo probare y vere q sucede bueno espero sigan ayudando a la comunidad conn estos aportes grax!!
ResponderBorrarGracias por el tutorial amigo estoy empezando con java en la empresa donde trabajo y me ha sacado de apuros, Gracias muy bueno el tutorial muy claro
ResponderBorrarAl descomprimir el archivo me salen que estan dañados los archivos.
ResponderBorrarNo puedo descomprimir los archivos me marcan que estan dañados
ResponderBorrarPor si aun les interesa, la contraseña para descomprimir el archivo es http://monillo007.blogspot.com (sin punto al final).
ResponderBorrarSaludos
Hola amigos, ¿Quieren un préstamo en efectivo hoy, solo hay una compañía que puedo recomendar para ustedes, donde recibí mi préstamo de $ 150,000 de Atlas Loan, aquí está su dirección de correo electrónico Atlasloanfirm@outlook.com
ResponderBorrarHola amigos, ¿Quieren un préstamo en efectivo hoy, solo hay una compañía que puedo recomendar para ustedes, donde recibí mi préstamo de $ 150,000 de Atlas Loan, aquí está su dirección de correo electrónico Atlasloanfirm@outlook.com
ResponderBorrarHola amigos, ¿Quieren un préstamo en efectivo hoy, solo hay una compañía que puedo recomendar para ustedes, donde recibí mi préstamo de $ 150,000 de Atlas Loan, aquí está su dirección de correo electrónico Atlasloanfirm@outlook.com
ResponderBorrarOfrecemos préstamos privados, comerciales y personales con una tasa de interés anual de muy bajas temperaturas hasta el 2% anual con un vencimiento de 50 años, en cualquier parte del mundo. Ofrecemos préstamos entre US $ 5000 y US $ 100 millones.
ResponderBorrarDirección de correo electrónico del prestamista: Garryjonesloanfirm@hotmail.com
Atentamente,
Sr. Harry Jones.
Garryjonesloanfirm@hotmail.com