15 de febrero de 2013

ACME con JAVA-MySQL sin GUI NetBeans

Este ejemplo se trabaja sobre el NetBeans IDE 7.2.1 y sobre la base de datos: empleado, tabla: registro en MySQL, al referirme a que no tendrá GUI es que no se diseñara una interfaz gráfica o JFrame Form, sino que los registros a ingresar, a modificar, a eliminar o seleccionar estarán en el Main de la aplicación debidamente definidos por el programador y se mostraran en consola tanto los datos de la tabla registro después de realizar las acciones sobre ella asi como mensajes que verifiquen que nuestra acción se ha realizado correctamente o incorrectamente.

Conexión Java-MySQL
Lo primero sera crear una nueva aplicacion en Java utilizando NetBeans tal como se muestra:


y de nombre le especificamos ACME_noGUI y luego presionamos Finish para empezar a trabajar


Lo primero a realizar sera importar la libreria de MySQL, si tienes alguna duda de como conectar Java con MySQl  mediante el conector mira esta entrada:
http://pabletoreto.blogspot.com/2013/01/conectar-java-con-mysql.html
esta otra forma utilizando la clase MysqlDataSource puede parecerte igualmente interesante:
http://pabletoreto.blogspot.com/2013/02/otra-forma-de-conectarse-una-base-de.html


Nos conectaremos a MySQL a la base de datos empleado y a la tabla registro que tiene los siguientes campos que utilizaremos:


Librerías y variables necesarias.
Lo del orden es relativo, pero al menos a mi me pareció mas ordenado el declarar todas las variables que iba a utilizar con su respectivo valor, no están dentro de un constructor porque las declare estáticas  esto porque se utilizan dentro de métodos estáticos, porque? porque todas las invocaciones a los métodos se realizan desde el Main de la aplicación el cual es Static, aquí esta el código en que se importa la librería necesaria y se declaran las variables que se utilizaran en la aplicación.

package acme_nogui;
import java.sql.*;

public class ACME_noGUI {

    static String url="jdbc:mysql://localhost/empleado";
    static String user="root";
    static String pass="root";
    static Connection cnn;
    static String mostrar="select * from registro";
    static String agregar="insert into registro(nombres, cargo, departamento, jefe)"
            + "values(?,?,?,?)";
    static String modificar="update registro set nombres=?, cargo=?, departamento=?, jefe=?"
                + "where codigo=?";
    static String eliminar="delete from registro where codigo=?";

Conexión a la base de datos.
El método para conectarse a la base de datos se llama Connectar y aquí utilizamos Class.forName que nos sirve para asegurarnos que el Driver se inicializa y se registra, luego solo pediremos una conexión a la clase DriverManager mediante su método getConnection al cual le pasamos tres parametros: url, user y pass, todo nuestro código va dentro de un Try-Catch, también se incluye el método estático Desconnectar.

public static void Connectar(){
        try{
    Class.forName("com.mysql.jdbc.Driver");
    cnn=DriverManager.getConnection(url, user, pass);
          }catch(ClassNotFoundException cnfex){
          System.out.println("Connectar:" +cnfex.getMessage());
          }catch(SQLException sqlex){
           System.out.println("Connectar:" +sqlex.getMessage());   
          }catch(Exception ex){
           System.out.println("Connectar:" +ex.getMessage());
          }}
    
    public static void Desconnectar(){
        try{
        cnn.close();
        }catch(SQLException sqlex){
        System.out.println("Desconnectar:" +sqlex.getMessage());
        }catch(Exception ex){
        System.out.println("Desconnectar:" +ex.getMessage());
        }}

Mostrando todos los datos dela tabla registros.
Para mostrar todos los datos de la tabla registro se utiliza el método MostrarDatos() que simplemente realiza una consulta select sobre la tabla, utilizamos Statement para realizar la consulta y ResultSet para mostrar los datos en consola, todo dentro de un Try-Catch e invocando los metodos Connectar y Desconnectar.

public static void MostrarDatos(){
    try{
        Connectar();
        Statement smt=cnn.createStatement();
        ResultSet rs=smt.executeQuery(mostrar);
        while(rs.next()){
        System.out.println("Codigo:        \t\t" +rs.getInt(1));
        System.out.println("Empleado:      \t\t" +rs.getString(2));
        System.out.println("Cargo:         \t\t" +rs.getString(3));
        System.out.println("Departamento:  \t\t" +rs.getString(4));
        System.out.println("Jefe:          \t\t" +rs.getString(5));
        }
        rs.close();
        smt.close();
    }catch(SQLException sqlex){
    System.out.println(sqlex.getMessage());
    }catch(Exception ex){
    System.out.println(ex.getMessage());    
    }finally{
    Desconnectar();
    }}

Ingresando datos a la tabla registros.
El método para ingresar datos a la tabla registro se llama AgregarDatos() y se utiliza un PreparedStatement para organizar mejor la consulta y un entero que nos indica si se ha realizado una acción sobre la base de datos, en caso de ser 1 se presenta un mensaje que indica que se ha realizado la acción de insertar datos sobre la tabla registros y se invoca al método MostarDatos() para que podamos ver en consola todos los datos de la tabla registro después de haber ingresado un nuevo empleado, cerrando durante el código el PreparedStatement y cerrando la conexión al invocar al método Desconnectar().

public static void AgregarDatos(String nombres, String cargo,
            String departamento, String jefe){
    int Resagregar;
  try{
            Connectar();
            PreparedStatement psmt=cnn.prepareStatement(agregar);
            psmt.setString(1, nombres);
            psmt.setString(2, cargo);
            psmt.setString(3, departamento);
            psmt.setString(4, jefe);
            Resagregar= psmt.executeUpdate();
            if(Resagregar==1){
            System.out.println("Datos Agregados Correctamente !!!");
            MostrarDatos();
            }else{
            System.out.println("Datos no se agregaron");
            }
            psmt.close();
        }catch(SQLException sqlex){
            System.out.println("AgregarDatos:" +sqlex.getMessage());
        }catch(Exception ex){
            System.out.println("AgregarDatos:" +ex.getMessage());
        }finally{
           Desconnectar();  
        }}

Modificando datos de la tabla registros.
El método El método para ingresar datos a la tabla registro se llama ModificarDatos() y se utiliza un PreparedStatement para organizar mejor la consulta y un entero que nos indica si se ha realizado una acción sobre la base de datos, en caso de ser 1 se presenta un mensaje que indica que se ha realizado la acción de modificar datos sobre la tabla registros y se invoca al método MostarDatos() para que podamos ver en consola todos los datos de la tabla registro después de haber modificado un empleado segun su codigo, cerrando durante el código el PreparedStatement y cerrando la conexión al invocar al método Desconnectar().

public static void ModificarDatos(int codigo, String nombres, String cargo,
            String departamento, String jefe){
    int Resmodificar;
  try{
            Connectar();
            PreparedStatement psmt=cnn.prepareStatement(modificar);
            psmt.setString(1, nombres);
            psmt.setString(2, cargo);
            psmt.setString(3, departamento);
            psmt.setString(4, jefe);
            psmt.setInt(5, codigo);
            Resmodificar= psmt.executeUpdate();
            if(Resmodificar==1){
            System.out.println("Datos Modificados Correctamente !!!");
            MostrarDatos();
            }else{
            System.out.println("Datos no se modificaron");
            }
            psmt.close();
        }catch(SQLException sqlex){
            System.out.println("ModificarDatos:" +sqlex.getMessage());
        }catch(Exception ex){
            System.out.println("ModificarDatos:" +ex.getMessage());
        }finally{
           Desconnectar();  
        }}

Eliminando datos de la tabla registros.
El método para eliminar los datos de un empleado especificado segun su codigo de la tabla registro se llama EliminarDatos() y se utiliza un PreparedStatement para organizar mejor la consulta y un entero que nos indica si se ha realizado una acción sobre la base de datos, en caso de ser 1 se presenta un mensaje que indica que se ha realizado la acción de eliminar datos sobre la tabla registros y se invoca al método MostarDatos() para que podamos ver en consola todos los datos de la tabla registro después de haber eliminado el empleado, cerrando durante el código el PreparedStatement y cerrando la conexión al invocar al método Desconnectar().

public static void EliminarDatos(int Codigo){
    int Reseliminar;
    try{
        Connectar();
        PreparedStatement psmt= cnn.prepareStatement(eliminar);
        psmt.setInt(1, Codigo);
        Reseliminar=psmt.executeUpdate();
        if(Reseliminar==1){
        System.out.println("Datos Eliminados Correctamente !!!");
        MostrarDatos();    
        }else{
        System.out.println("Datos no se eliminaron");
        }
        psmt.close();
        }catch(SQLException sqlex){
        System.out.println("EliminarDatos:" +sqlex.getMessage());
        }catch(Exception ex){
        System.out.println("EliminarDatos:" +ex.getMessage());
        }finally{
        Desconnectar();
      }}

Main de la aplicación Java.
El main solamente dictara a que método se invocara, ya sea Agregar un nuevo empleado mandandole al método estático AgregarDatos los parámetros necesarios, también puede modificar los datos de un empleado mandando como parámetro el código del empleado a modificar y los valores que desea modificar, también se pueden eliminar datos de un empleado invocando al método estático EliminarDatos o simplemente mostrar todos los datos de la tabla registro al llamar al método MostrarDatos().

Algo a tener en cuenta es que al realizar una llamada a un método estático en especifico, se deben comentariar los restantes invocaciones a métodos, para tener una idea mas clara de como trabaja la aplicación y que recuerden que el código del empleado es un entero autonumerico, así que al mandar el parámetro código al método ModificarDatos() o EliminarDatos() deben saber exactamente el codigo del empleado sobre el que quieren actuar.

public static void main(String[] args) {
       AgregarDatos("JavaEmployee","Programador","Informatica","El mismo");
       //ModificarDatos(9,"Java","Tecnico Programador","Informatica","Juan");
       //EliminarDatos(9);
       //MostrarDatos();
    }
}