Conectar aplicación Java a una BD

java-logo

En mis últimas vacaciones estuve experimentando mucho con Java y sus múltiples facetas (o al menos las que debería conocer ya) a las que se aplica en la informática, desde las simples aplicaciones por Consola, los GUI’s y las aplicaciones Web con Servlets y JSP’s. Sin embargo llegue un punto que me me costó aprenderlo bien por la semántica de su uso, y es la interacción que tiene Java con las bases de Datos, mediante el Paquete Java.SQL pero al final comprendí que es muy fácil y muy útil, sobre todo si quieres que tu aplicación (sea Web o Desktop) maneje inmensas cantidades de datos que no se soportan en un fichero de texto, o que simplemente quieres que sean mejor administrados por un manejador de BD (cualquiera), pero bueno, eso ya se tendría que ver en la planificación del proyecto.

Ahora (saliendo del floro) enseñaré como es que una aplicación Java En Desktop puede conectarse a una Base de Datos Que Tengo en MySQL (para mí, el mejor manejador de BD por su simplicidad) en una simple aplicación con NetBeans donde sólo usaré una base de datos con una Tabla y 5 Datos de ejemplo que sólo se pueden mostrar (si te quieres expandir, puedes hacer que los modifique o elimine, pero prácticamente es el mismo proceso).

Para esto usaremos el afamado NetBeans, en su versión 6.7 y MySQL (el que uso yo es el que viene incorporado en WampServer):

En Netbeans primero creamos la aplicación y lo colocamos tal como muestran las imágenes y le damos a “Finish”:

image

image

Luego vemos que se creo una aplicación limpia sin frames ni nada… y por las moscas, lo que haremos será agregar el Driver MySQL a las librerías (sino nos dará una Exception de que no existe la clase, pero no se moleste en entender esto, ya luego se darán cuenta):

image

Eligen el Driver MySQL JDBC, que en este caso ya viene en NetBeans, en caso no encuentres algún driver puedes darle a “Create” y crear un driver basado en algún archivo Jar que te dé el fabricante del Manejador de BD como conector a Java.

image

Ahora sí, una vez terminado estas importaciones de Rutina creamos un Frame (o si quieres lo haces vía código) vía clic derecho en el Paquete, New, JFrame Form y luego para diseñar, NetBeans es bueno… Yo me hice uno así (Clic para ver grande):

conexionbd_design

Ahora bien, en la imagen anterior indiqué los nombres de las variables (que pueden colocar si le hacen clic derecho al control y luego “Change Variable Name”) ya que usaremos sus eventos o llamadas de valores (los set y getTexts) y bueno, es más eficiente…

Ahora vamos con el código… primero le hacemos un clic derecho al Botón “btnMostrar” y elegimos Events >> Action >> actionPerformed que vendría a ser el evento que ocurre al darle clic a ese botón. y se abrirá el editor de código con esta vista:

private void btnConectarActionPerformed(java.awt.event.ActionEvent evt) {

//

}

*****************************************************************
Recomendación:

Yo acostumbré a borrar el main del Frame, para llamarlo desde el Main.java de la aplicación, me parece más práctico… simplemente anda al código de tu Frame y quita estas líneas de código:

public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {
new ventana().setVisible(true);
}
});    

*****************************************************************

Nos encargaremos de operar sólo en ese método actionPerformed sin olvidar importar el paquete java.sql:

import java.sql.*;

y ahora si… empecemos a trabajar en ese evento… primero que nada, agreguen un Try-Catch al evento de esta forma:

private void btnConectarActionPerformed(java.awt.event.ActionEvent evt) {
try {
} catch (Exception e) {
txtResultado.setText("Hubo un error En La Conexión, Reintente otra vez");
txtDatos.setText("No hay datos que mostrar");
}
}

Lo que pasara en una excepción será que los controles txtResultado y txtDatos mostrarán esos mensajes.

**********************************************************
Dejemos un momento el código en Netbeans para ir creando nuestra base de datos en MySQL (Obvien este paso si ya tienen preparada una base de datos simple):

Abrimos consola y colocamos las siguientes sentencias:

mysql> create database producto_netbeans;

mysql> create table producto_basico(
>nombre VARCHAR(20), marca VARCHAR(20));

Así habremos creado una sencilla Base De Datos producto_netbeans con una tabla Producto_basico con dos atributos: Nombre y Marca.

Ahora insertamos los datos:

INSERT INTO 'producto_basico' ('nombre' ,
'marca')
VALUES ('jabon ', 'bolivar'), ('detergente', 'ace'), ('arroz','costeño'), ('azucar', 'laredo'), ('gaseosa','coca cola');

Y ya tenemos una base de datos de donde tomar los datos para nuestra aplicación.
**********************************************************

Regresando a nuestro proyecto en NetBeans, ahora insertamos el driver y creamos una nueva instancia a partir de ella así:

private void btnConectarActionPerformed(java.awt.event.ActionEvent evt) {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch (Exception e) {
txtResultado.setText("Hubo un error En La Conexión, Reintente otra vez");
txtDatos.setText("No hay datos que mostrar");
}
}

Luego crearemos un objeto Conexion, donde haremos que se le pasen los parámetros ingresados en la GUI, tales como el usuario y el password, para que se conecte a partir de eso, de esta manera:

private void btnConectarActionPerformed(java.awt.event.ActionEvent evt) {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection c = DriverManager.getConnection("jdbc:mysql://" + txtURL.getText() + ":" + txtPort.getText(), txtUsuario.getText(), txtPassword.getText());

txtResultado.setText("Acaba de ingresar correctamente a MySQL con el usuario "+txtUsuario.getText()); //Esto lo colocamos para que muestre en pantalla que hemos ingresado bien...
} catch (Exception e) {
txtResultado.setText("Hubo un error En La Conexión, Reintente otra vez");
txtDatos.setText("No hay datos que mostrar");
}
}

Ahora viene un poco la parte final y confusa, así que lo explicare todo de un sólo paso, lo que se hace ahora si queremos mostrar los datos en el otro TextArea, es crear un Statement en Base a la variable Connection c, y luego un ResultSet r, que será igual al Statement con un parametro String pasado, que vendría a ser prácticamente la sentencia SQL a ejecutar mediante el método executeQuery, que sirve para SELECT’s. Ahora bien, una vez creado eso, para mostrar la variable debemos crear un While con condición de que mientras r.next() sea verdadero, se sigan mostrando elementos del resulset, r.next() verifica que haya un siguiente registro… en el ejemplo yo almacené todo en un String, para luego mostrar los dos Strings juntos en el text txtDatos, de la siguiente manera:

private void btnConectarActionPerformed(java.awt.event.ActionEvent evt) {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection c = DriverManager.getConnection("jdbc:mysql://" + txtURL.getText() + ":" + txtPort.getText(), txtUsuario.getText(), txtPassword.getText());

txtResultado.setText("Acaba de ingresar correctamente a MySQL con el usuario "+txtUsuario.getText());

Statement s = c.createStatement(); //crea el Statement
ResultSet r = s.executeQuery("Select * from producto_netbeans.producto_basico"); //crea el Resultset y de paso añade la sentencia SQL

String mensajeNombre = "", mensajeMarca = ""; //las variables donde almacenare resultados

while(r.next()) //si es falso se detiene
{
mensajeNombre = mensajeNombre +r.getString(1)+"\n"; //r.getString(x) es la columna contenida en el SELECT
mensajeMarca = mensajeMarca + r.getString(2)+"\n";
}

txtDatos.setText("Los Nombres contenidos son:\n "+mensajeNombre+ "\nY Las Marcas son:\n"+mensajeMarca);  //finalmente se muestra todo....

} catch (Exception e) {
txtResultado.setText("Hubo un error En La Conexión, Reintente otra vez");
txtDatos.setText("No hay datos que mostrar");
}
}

Bueno, eso fue algo básico y más o menos lo quise explicar, si hay alguna duda sólo pregunten… de paso que ahí adjunto los archivos de proyecto (si lo abren desde el proyecto no olviden reimportar la librería del Driver como al comienzo) y el JAR ejecutable en la carpeta DIST de dicho Proyecto, espero les Sirva!… Saludos

DESCARGA PROYECTO EN NETBEANS