Sergio Alejandro Prada Castiblanco
TG Arquitectura de Software
TP Ingeniera de Sistemas
CONEXIN DIRECTA MYSQL JAVA SWING
CONEXIN MYSQL CON JAVA SWING
En este tutorial se mostrar por medio de una pequea
aplicacin (muy bsica) echa en el entorno grfico de java donde
veremos de forma fcil como conectarnos a una Base de datos
Mysql para registrar informacin.
Un punto Importante a tener en cuenta es que en este tutorial
aplicaremos los Patrones VO (Vale Object) y DAO(Data Access
Objetc).
Requisitos.
Ambiente de desarrollo (En este caso Netbeans 7.3)
JDK instalado.
Mysql Instalado
Conocimientos Bsicos de Programacin.
Ganas de Continuar.
Sergio Alejandro Prada Castiblanco
TG Arquitectura de Software
TP Ingeniera de Sistemas
CONEXIN DIRECTA MYSQL JAVA SWING
Comencemos
Bueno, vamos a hacer una aplicacin simple, la idea de este
tutorial es ver como conectarnos a Mysql desde Java, y para eso
lo primero que vamos a hacer es simplemente crear una base
desde donde podamos trabajar.
La Base de Datos.
La base de datos solo tendr la tabla usuarios con los datos bsicos
de registro (si se desea se puede dar otro enfoque a la tabla o
trabajar con muchas ms), el Script para la creacin es el siguiente:
CREATE DATABASE IF NOT EXISTS ejemplo;
USE ejemplo;
DROP TABLE IF EXISTS usuarios;
CREATE TABLE usuarios (
`id` int(10) NOT NULL,
`nombre` varchar(30) default NULL,
`edad` int(3) default NULL,
`profesion` varchar(30) default NULL,
`telefono` decimal(10,0) default NULL,
PRIMARY KEY (`id`)
);
Sergio Alejandro Prada Castiblanco
TG Arquitectura de Software
TP Ingeniera de Sistemas
CONEXIN DIRECTA MYSQL JAVA SWING
Estructura del Proyecto
Para iniciar vamos a crear un proyecto java en Netbeans:
1. Damos clic sobre nuevo Proyecto
Escogemos el Tipo de proyecto
Sergio Alejandro Prada Castiblanco
TG Arquitectura de Software
TP Ingeniera de Sistemas
CONEXIN DIRECTA MYSQL JAVA SWING
Le ponemos un nombre y damos en finalizar
Sergio Alejandro Prada Castiblanco
TG Arquitectura de Software
TP Ingeniera de Sistemas
CONEXIN DIRECTA MYSQL JAVA SWING
Por cuestiones de organizacin crearemos las clases de nuestro
diagrama separndolas por paquetes, esto con el fin de tener
nuestro proyecto ms estructurado y fcil de entender, el
proyecto debe quedar as.
Como vemos tenemos un paquete por cada clase, en estos
momentos la aplicacin es pequea por lo tanto no nos da
problemas de organizacin, sin embargo a medida que vaya
creciendo se hace importante tener nuestras clases agrupadas
facilitando as el trabajo futuro y la Mantenibildad de nuestro
sistema.
Adems de tener la estructura del proyecto como se
menciona anteriormente, se ha agregado la librera que se usara
para la conexin a nuestra base de datos.
Sergio Alejandro Prada Castiblanco
TG Arquitectura de Software
TP Ingeniera de Sistemas
CONEXIN DIRECTA MYSQL JAVA SWING
La forma para agregar la librera es la siguiente:
1. Dar click derecho sobre la carpeta libraries y seleccionar la
opcin Add Library.
2. Escoger de la lista la librera de Mysql y agregarla al proyecto
Sergio Alejandro Prada Castiblanco
TG Arquitectura de Software
TP Ingeniera de Sistemas
CONEXIN DIRECTA MYSQL JAVA SWING
DEFINICION DE CLASES
Clase DbConnection.
Esta clase ser nuestra cadena de conexin, aqu definiremos los
parmetros requeridos para conectarnos a la BD creada
anteriormente.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package ejemplo.conexion;
import java.sql.*;
import javax.swing.JOptionPane;
/**
*
* @author Zeryi
*/
public class DbConnection {
static String db = "ejemplo";
static String user = "root";
static String pass = "";
static String url = "jdbc:mysql://localhost/"+db;
Connection connection = null;
public DbConnection() {
try{
//obtenemos el driver de para mysql
Class.forName("com.mysql.jdbc.Driver");
//obtenemos la conexin
connection = DriverManager.getConnection(url,user,pass);
if (connection!=null){
JOptionPane.showMessageDialog(nulle,"Con xin a base de datos "+db+" OK\n");
}
}
catch(SQLException e){
Sergio Alejandro Prada Castiblanco
TG Arquitectura de Software
TP Ingeniera de Sistemas
CONEXIN DIRECTA MYSQL JAVA SWING
JOptionPane.showMessageDialog(null,e);
}catch(ClassNotFoundException e){
JOptionPane.showMessageDialog(null,e);
}catch(Exception e){
JOptionPane.showMessageDialog(null,e);
}
}
/**Permite retornar la conexin*/
public Connection getConnection(){
return connection;
}
public void desconectar(){
connection = null;
}
}
Clase UsuariosVO.
Esta clase nos permite dar un manejo mucho ms organizado y
seguro a nuestra informacin, en ella estamos aplicando el
patrn VO (Value Object) con el cual nos aseguramos que los
datos viajen en un solo objeto, evitando no solo l envi de gran
cantidad de parmetros sino tambin un mayor control.
Debemos saber que por cada tabla de nuestra BD se tiene que
construir su equivalente clase VO.
Sergio Alejandro Prada Castiblanco
TG Arquitectura de Software
TP Ingeniera de Sistemas
CONEXIN DIRECTA MYSQL JAVA SWING
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package ejemplo.vo;
/**
*
* @author Zeryi
*/
public class UsuariosVO {
private int id;
private String nombre;
private int edad;
private String profesion;
private int telefono;
public int getId() {
return id;}
public String getNombre() {
return nombre;}
public int getEdad() {
return edad;}
public String getProfesion() {
return profesion;}
public int getTelefono() {
return telefono;}
public void setId(int id) {
this.id = id;}
public void setNombre(String nombre) {
this.nombre = nombre;}
public void setEdad(int edad) {
this.edad = edad;}
public void setProfesion(String profesion) {
this.profesion = profesion;}
public void setTelefono(int telefono) {
this.telefono = telefono;}
}
Sergio Alejandro Prada Castiblanco
TG Arquitectura de Software
TP Ingeniera de Sistemas
CONEXIN DIRECTA MYSQL JAVA SWING
Como vemos cada campo de la tabla Usuarios es reflejado en la
Clase UsuariosVO, tambin aplicamos un poco el concepto
de Encapsulacin mediante la creacin de mtodos setter y
getter por cada dato privado.
Clase UsuariosDAO.
Esta clase ser la encargada de gestionar el acceso a los datos,
con ella aplicamos un patrn DAO (Data Access Objetc).
Bsicamente necesitamos saber que este patrn nos ensea la
forma de obtener informacin de la BD mediante mtodos CRUD
(Create, Read, Update y Delete), as que por cada tabla de
nuestra BD debemos tener una clase DAO que la represente.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package ejemplo.Dao;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import javax.swing.JOptionPane;
Sergio Alejandro Prada Castiblanco
TG Arquitectura de Software
TP Ingeniera de Sistemas
CONEXIN DIRECTA MYSQL JAVA SWING
import ejemplo.conexion.DbConnection;
import ejemplo.vo.UsuariosVO;
/**
*
* @author Zeryi
*/
public class UsuariosDao {
/**
* Permite registrar un Usuario
*/
public void registrarPersona(UsuariosVO Usuario)
{
DbConnection con= new DbConnection();
try {
Statement st = con.getConnection().createStatement();
st.executeUpdate("INSERT INTO usuarios "
+ "VALUES ("
+Usuario.getId()+",'"
+Usuario.getNombre()+"',"
+Usuario.getEdad()+",'"
+Usuario.getProfesion()+"',"
+Usuario.getTelefono()+")");
JOptionPane.showMessageDialog(null, "Se ha registrado
Exitosamente","Informacin",JOptionPane.INFORMATION_MESSAGE);
st.close();
con.desconectar();
}catch (SQLException e) {
JOptionPane.showMessageDialog(null,e.getMessage());
JOptionPane.showMessageDialog(null,"No se Registro la persona");
}
}
/**
* permite consultar el empleado asociado al documento enviado
* como parametro
*/
public ArrayList<UsuariosVO> consultarUsuario(int documento) {
ArrayList<UsuariosVO> MiUsuario = new ArrayList<UsuariosVO>();
DbConnection con= new DbConnection();
try {
PreparedStatement consulta = con.getConnection().prepareStatement("SELECT *
FROM usuarios where id = ? ");
Sergio Alejandro Prada Castiblanco
TG Arquitectura de Software
TP Ingeniera de Sistemas
CONEXIN DIRECTA MYSQL JAVA SWING
consulta.setInt(1, documento);
ResultSet res = consulta.executeQuery();
if(res.next()){
UsuariosVO persona= new UsuariosVO();
persona.setId(Integer.parseInt(res.getString("id")));
persona.setNombre(res.getString("nombre"));
persona.setEdad(Integer.parseInt(res.getString("edad")));
persona.setProfesion(res.getString("profesion"));
persona.setTelefono(Integer.parseInt(res.getString("telefono")));
MiUsuario.add(persona);
}
res.close();
consulta.close();
con.desconectar();
}catch (Exception e) {
JOptionPane.showMessageDialog(null, "no se pudo consultar la Persona\n"+e);
}
return MiUsuario;
}
}
Por cuestiones de tiempo no realizaremos todo el CRUD, tan solo
vamos a trabajar con el mtodo de registro (Los mtodos de
Consulta, actualizacin y eliminacin sern una buena tarea, la
cual realizar).
Cada mtodo usa la cadena de conexin creada anteriormente y
se enfoca en una tarea en especfico, adems en cada uno
hacemos uso de un objeto de tipo UsuariosVO, mediante el cual
asignamos la informacin de nuestra tabla usuarios, tanto para el
registro como para la consulta de informacin.
Sergio Alejandro Prada Castiblanco
TG Arquitectura de Software
TP Ingeniera de Sistemas
CONEXIN DIRECTA MYSQL JAVA SWING
Clase Principal.
Para esta clase vamos a agregar un jframe, y en el cual vamos a
hacer el llamado a todos los procesos de nuestra aplicacin,
tendremos un men en el cual presentamos todas las opciones
del sistema, as mismo se validaran las entradas del usuario para
evitar posibles inconsistencias y posteriormente se hace el
llamado a la clase DAO que permite ejecutar los procesos de
conexin con la BD.
Agregar un jframe, debemos dar clic derecho sobre el paquete y
seleccionar la opcin New y dentro de esta Opcion buscar
JFrameForm
Sergio Alejandro Prada Castiblanco
TG Arquitectura de Software
TP Ingeniera de Sistemas
CONEXIN DIRECTA MYSQL JAVA SWING
Le asignamos un nombre a nuestra JFrame y listo, luego rmanos
el formulario de registro con ayuda de la paleta de componentes
de la ubicada a la derecha del JFrame. El formulario debe quedar
como se muestra a continuacin.
Sergio Alejandro Prada Castiblanco
TG Arquitectura de Software
TP Ingeniera de Sistemas
CONEXIN DIRECTA MYSQL JAVA SWING
Sergio Alejandro Prada Castiblanco
TG Arquitectura de Software
TP Ingeniera de Sistemas
CONEXIN DIRECTA MYSQL JAVA SWING
Luego damos doble clic sobre la pestaa de Source ubicada
encima del JFrame
Y agregamos las siguientes lneas de cdigo.
package ejemplo.principal;
//imports necesarios
import javax.swing.JOptionPane;
import ejemplo.Dao.UsuariosDao;
import ejemplo.vo.UsuariosVO;
public class Principal extends javax.swing.JFrame {
/**
* Creates new form Principal
*/
UsuariosDao MiUsuarioDao;// Instancia de UsuariosDao
public Principal() {
initComponents();
}
Sergio Alejandro Prada Castiblanco
TG Arquitectura de Software
TP Ingeniera de Sistemas
CONEXIN DIRECTA MYSQL JAVA SWING
Luego volvemos al diseo del Frame y damos doble clic cobre el
Jbotn guardar y escribimos el siguiente cdigo.
Accion btn_guardar
private void btn_guardarActionPerformed(java.awt.event.ActionEvent evt) {
MiUsuarioDao = new UsuariosDao();
UsuariosVO miUsuario=new UsuariosVO();
String nombre="",profesion="",id="",edad="",telefono="";
id=txt_id.getText();
nombre=txt_nombre.getText();
profesion=txt_profesion.getText();
telefono=txt_telefono.getText();
edad=txt_edad.getText();
if(nombre.equals("")||profesion.equals("")||edad.equals("")||telefono.equals("")||id.
equals("")){
JOptionPane.showMessageDialog(null, "Datos
Incompletos","Informacin",JOptionPane.WARNING_MESSAGE);
}else{
miUsuario.setId(Integer.parseInt(id));
miUsuario.setNombre(nombre);
miUsuario.setEdad(Integer.parseInt(edad));
miUsuario.setProfesion(profesion);
miUsuario.setTelefono(Integer.parseInt(telefono));
try {
MiUsuarioDao.registrarPersona(miUsuario);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Error General del
Sistema","Informacin",JOptionPane.WARNING_MESSAGE);
}
}
}
Sergio Alejandro Prada Castiblanco
TG Arquitectura de Software
TP Ingeniera de Sistemas
CONEXIN DIRECTA MYSQL JAVA SWING
Despus de haber realizado todo lo anterior, solo nos queda por
ejecutar nuestra aplicacin.
Diligenciar el formulario.
Sergio Alejandro Prada Castiblanco
TG Arquitectura de Software
TP Ingeniera de Sistemas
CONEXIN DIRECTA MYSQL JAVA SWING
Dar clic en el botn guardar
Sergio Alejandro Prada Castiblanco
TG Arquitectura de Software
TP Ingeniera de Sistemas
CONEXIN DIRECTA MYSQL JAVA SWING
Por ultimo nos queda por revisar la base de datos para
comprobar los datos ingresados, pero esa ya es tarea de ustedes.
Espero haber sido de mucha ayuda.