Mi?rcoles, 15 de abril de 2015

A continuación se explicara la manera de conectar y desarrollar una aplicación en Netbeans 8, que permita salvar, modificar y eliminar datos de una base de datos de Oracle 11g.

ORACLE – TABLAS, PROCEDIMIENTOS Y LANZADORES.

  1. En oracle, dentro de la conexión de hr, crear una base de datos llamada sales.

CREATE TABLE SALES

( EMPLOYEE_ID NUMBER(6),

  AMOUNT NUMBER(10),

  SALE_DATE DATE);

  2. De igual forma en la conexión de hr, crear otra tabla llamada salespermonthyear.

CREATE TABLE SALESPERMONTHYEAR

(

  MES NUMBER(4)

, YEAR NUMBER(4)

, AMOUNT NUMBER(12)

);

 

 3. Ahora generar un procedimiento almacenado para la insercion de datos en la tabla sales.

create or replace PROCEDURE INSERT_DATOS --INCIA EL SEGMENTO PARA CREAR EL PROCEDMIENTO

--CREACION DE VARIABLES  RECEPTORAS

( PIDE IN NUMBER ,

  PAM IN NUMBER ,

  PDATE IN DATE ) AS

BEGIN--INICIA EL PROCEDIMIENTO

   INSERT INTO SALES VALUES (PIDE,PAM,PDATE);--SENTENCIA INSERT USANDO LAS VARIABLES RECEPTORAS CREADAS

END INSERT_DATOS;--CIERRE DEL PROCEDIMIENTO

 

4. Generar ahora un procedimiento para la inserción de datos en salespermonthyear.

 

create or replace PROCEDURE PS_ADD_SALE --INICIA EL PROCEDIMIENTO

--CREACION DE VARIABLES  RECEPTORAS

( PIDEMPLOYEE IN NUMBER,

  PAMOUNT IN NUMBER,

  PSALE IN DATE) AS

  --CREACION DE VARIABLES DE FUNCION

  vmes NUMBER;

  vanio NUMBER;

  regs NUMBER;

  --INICIA EL PROCEDIMIENTO

  BEGIN

    vmes:= EXTRACT(MONTH FROM  PSALE);--EXTRAER EL MES DEL CAMPO PSALE(FECHA)

    vanio:= EXTRACT(YEAR FROM PSALE);--EXTRAER EL AÑO DEL CAMPO PSALE(FECHA)

    --CONSULTA A LA TABLA SALESPERMONTHYEAR USANDO EL MES Y AÑO COMO PARAMETROS DE BUSQUEDA

    SELECT COUNT(*) INTO regs FROM SALESPERMONTHYEAR WHERE MES=vmes AND YEAR=vanio;

    IF regs=0 THEN--SI NO HAY REGISTROS DE LA CONSULTA ANTERIOR, INSERTAR DATOS EN SALESPERMONTHYEAR

      INSERT INTO SALESPERMONTHYEAR

        VALUES (vmes,vanio,pamount);

    ELSE--DE LO CONTRARIO, ACTUALIZAR EL MONTO(SUMAR MONTO), USANDO COMO PARAMETROS DE BUSQUEDA EL MES Y EL AÑO

      UPDATE SALESPERMONTHYEAR

        SET AMOUNT=AMOUNT+pamount

        WHERE MES=vmes AND YEAR=vanio;

    END IF;--FIN DE LA CONDICION

END PS_ADD_SALE;--FIN DEL PROCEDIMIENTO

 5. Crear el disparador (trigger) que servira para poder ejecutar el procedimiento ps_add_sale.

 

create or replace TRIGGER TR_GENERA_VENTAS –INICIA TRIGGER

--USAR LA PALABRA RESERVADA AFTER, INDICANDO QUE EJECUTARA ESTE DISPARADOR DESPUES DE INSERTAR EN LA TABLA SALES

AFTER INSERT ON SALES

--DEFINE LO QUE SE EJECUTARA CADA VEZ QUE EL DISPARADOR SE ACTIVE, LO CUAL OCURRE UNA VEZ POR CADA FILA AFECTADA POR LA SENTENCIA ACTIVADORA.

FOR EACH ROW

BEGIN—INICIO DEL DISPARADOR

  PS_ADD_SALE(:new.employee_id,:new.amount,:new.sale_date); --ENVIAR LOS VALORES AL PROCEDIMIENTO PS_ADD_SALE

END;--FIN DEL DISPARADOR

JAVA – APLICACIÓN

 

  1. En netbeans crear una nueva aplicación llamada ventasapp
  2. En proyectos eliminar la clase ventasapp.java
  3. En el paquete de la aplicación crear una nueva clase llamada main

4. En las librerías del proyecto añadir el archivo ojdbc6.jar.

5. Dentro de la clase main insertar el siguiente código, que nos permitirá establecer la conexión a nuestra base de datos, así como hacer la consulta a la tabla que ocupamos en este proyecto:
 
package ventasapp;
import java.sql.*;
/**

 *

* @author Cesar_vFonseca

 */

public class main {

    /*Declaracion de variables*/

    static Connection conn=null;

    static Statement st=null;

    static ResultSet rs=null;

    /*Asignar datos de conexion*/

    static String bd="XE";//TIPO DE BASE DE DATOS

    static String login="HR";//USUARIO DE LA BASE DE DATOS

    static String password="123";//CONTRASEÑA DEL USUARIO

    static String url="jdbc:oracle:thin:@localhost:1521:XE";//URL DE CONEXION

 /*Metodo de conexion a la base de datos*/

    public static Connection Enlace(Connection conn)throws SQLException    {

        try {

         Class.forName("oracle.jdbc.OracleDriver");

         conn=DriverManager.getConnection(url, login, password);

        }

        catch(ClassNotFoundException e )

        {

            System.out.print("Clase no encontrada");

        }

        return conn;

    }

    /*Establecer la conexion a la base de datos*/

     public static Statement sta(Statement st)throws SQLException    {

        conn=Enlace(conn);

        st=conn.createStatement();

        return st;

    }

     /*Hacer una consulta a la tabla*/

    public static ResultSet EnlEst(ResultSet rs)throws SQLException    {

       st=sta(st);

       rs=st.executeQuery("SELECT  * FROM SALES");

        return rs;

    }

}

6. Ahora crearemos un jframe en el proyecto. Y lo nombraremos tbsales


7. Agregaremos ahora a la interfaz los siguientes elementos.

3 Botones(JButtons)

                Guardar (btnguardar)

                Modificar (btnmodificar)

                Cancelar (btncancelar)

2 Campos de Texto(JTextField)

                ID (txtid)

                Monto (txtmonto)

1 Campo de Fecha (JFormattedTextField)

                Fecha (txtfecha)

1 Tabla (JTable)

                Tabla (tbsales)

8. Así mismo al formulario agregaremos un elemento emergente (JPopMenu), dentro del elemento emergen 2 JMenuItem, y lo relacionaremos a la tabla(Propiedades JTable>componentPopupMenu). 


9. Importaremos las siguiente librerías en el código del formulario:

/*

  1. */         

         import java.sql.*;

         import javax.swing.JOptionPane;

         import javax.swing.table.DefaultTableModel;

10. Dentro de la clase añadiremos los siguientes parámetros:

     //creando variables de conexion a la base de datos

     static Connection conn=null;

    static Statement s=null;

    static ResultSet rs=null;

    //Para establecer el modelo al JTable

    DefaultTableModel modelo = new DefaultTableModel();

11. Ahora crearemos un métodos para mostrar los datos de Oracle en nuestra jtable, insertando el siguiente código después del método public tbsales()

/*AGREGAR A PARTIR DE AQUI*/

//CREANDO LA TABLA DE VENTAS

    void tbsales (){

            String []titulos={"Employee_id","Amount","Date_sale"};//CREANDO UN STRING PARA LO TITULOS 

            String []Registros=new String[3];//DEFINIR EL TAMAÑO DE LA MATRIZ QUE COLUMNAS

            modelo= new DefaultTableModel(null,titulos);//ASIGNAR LA MATRIZ TITUTLO A NUESTRO MODELO DEL JTABLE

            try{          

            rs=main.EnlEst(rs);//LLAMAMA AL METODO EnEst, EJECTURA UNA CONSULTA A LA TABLA SALES

             while(rs.next())//RECORRER LA CONSULTA COLUMNA POR COLUMNA

              {

                 //EXTRAER LOS CAMPOS DE LA BASE DE DATOS Y ASIGNARLOS A LA COLUMNAS DE LA TABLA

                  Registros[0]= rs.getString("EMPLOYEE_ID");

                  Registros[1]= rs.getString("AMOUNT");

                 Registros[2]= rs.getString("SALE_DATE").substring(0, 10);

                 //AÑADIR LAS COLUMNAS AL MODELO JTABLE

                  modelo.addRow(Registros);

              }

             //AÑADIR EL MODELO A NUESTRA TABLA

              tbsales.setModel(modelo);

           

            } catch (Exception ex) {

        ex.printStackTrace();//RECIBIR UN ERROR

       }

    }

12. Agregar un método para limpiar los campos, después del método anterior, para una mejor presentación.

 

   void limpiar(){

        txtid.setText(null);

        txtmonto.setText(null);

        txtfecha.setText(null);

   }

13. AGREGAR EL SIGUIENTE CODIGO AL BOTON DE GUARDAR

// Boton Guardar

                try {

                conn=main.Enlace(conn);//INVOCANDO LA CONEXION DESDE LA CLASE main

                 String sql="{call insert_datos(?,?,?)}";//QUERY

                 PreparedStatement pst=conn.prepareStatement(sql);//EJECUCION DE QUERY POR MEDIO DE STATEMENT

                 //ASIGANAR DE VARIABLES A LOS PARAMETROS DE QUERY

                 pst.setString(1, txtid.getText());

                 pst.setString(2, txtmonto.getText());

                 pst.setString(3, txtfecha.getText());

                 pst.execute();//EJECUTAR

                 pst.close();//CERRAR CONEXION

                 limpiar();//METODO PARA LIMPIAR CAMPOS

                 tbsales();//ACTUALIZAR LA VISTA DE LA TABLA

                 JOptionPane.showMessageDialog(null, "Guardado exitoso");//MENSAJE

        }catch (Exception e){

            System.out.println(e.getCause());//OBTENER ERROR

        }

    }

14. Al elemento emergente actualizar, le agregaremos el siguiente código.

// ELEMENTO POP MODIFICAR

        int fila = tbsales.getSelectedRow();//VARIABLE TIPO INT PARA OBTENER LOS DATOS DE JTABLE

        String id="",amnt="",date="";//VARIABLES STRING

        //OBTENER LOS VALORES DE JTABLE

         if (fila>=0){

            id=(tbsales.getValueAt(fila,0).toString());

            amnt=(tbsales.getValueAt(fila,1).toString());

            date=(tbsales.getValueAt(fila,2).toString());

         }

         //ASIGNAR LOS VALORES OBTENIDO A LAS VARIABLES STRING

         txtid.setText(id);

         txtmonto.setText(amnt);

         txtfecha.setText(date.substring(2, 10));

         btnmodificar.setEnabled(true);//BOTON MODIFICAR HABILITADO

         btnguardar.setEnabled(false);//BOTON GUARDAR DESHABILITADO

    }       

15. Al botón de actualizar añadir el siguiente código.

// MODIFICAR

        int fila = tbsales.getSelectedRow();//VARIABLE TIPO INT PARA OBTENER VALOR DE JTABLE

        String id="";//VARIABLE STRING

        //OBTENER VALOR ID DE LA TABLA

         if (fila>=0){

            id=(tbsales.getValueAt(fila,0).toString());

         }

        try {

                conn=main.Enlace(conn);//INVOCAR LA CONEXION DESDE LA CLASE main

                 String sql="{CALL MODIFICAR_VENTAS (?,?,?,?)}";//QUERY

                 PreparedStatement pst=conn.prepareStatement(sql);//EJECUCION DE QUERY POR MEDIO DE STATEMENT

                 pst.setString(1, id);//COMO PRIMER PARAMETRO, EL DATO OBTENIDO DE LA TABLE

                 //OBTENER LOS DATOS DE LAS CAJAS DE TEXTO

                 pst.setString(2, txtid.getText());

                 pst.setString(3, txtmonto.getText());

                 pst.setString(4, txtfecha.getText());

                  pst.execute();//EJECUTAR QUERY

                 pst.close();//CERRAR CONEXION

                 limpiar();//LIMPIAR CAMPOS

                 btnguardar.setEnabled(true);//BOTON GUARDAR HABILITADO

                 btnmodificar.setEnabled(false);//BOTON MODIFICAR DESHABILITADI

                 tbsales();//ACTUALIZAR VISTA DE LA TABLA

                 JOptionPane.showMessageDialog(null, "Cambio exitoso ");//MENSAJE

        }catch (Exception e){

            System.out.println(e.getCause());//OBTENER ERROR

        }

    }   

16. Al elemento emergente eliminar añadir el siguiente código.

 

//ELIMINAR POP

        int fila = tbsales.getSelectedRow();//VARIABLE TIPO INT PARA OBTENER VALOR DE JTABLE

        String emp_id="";//VARIABLE STRING

        //OBTENER VALOR ID DE LA TABLA

        emp_id=tbsales.getValueAt(fila, 0).toString();

             try {

                conn=main.Enlace(conn);//INVOCAR LA CONEXION DESDE LA CLASE main

                 String sql="{CALL ELIMINAR_VENTAS ("+emp_id+")}";//QUERY

                 PreparedStatement pst=conn.prepareStatement(sql);//EJECUCION DE QUERY POR MEDIO DE STATEMENT

                  pst.execute();//EJECUTAR QUERY

                  pst.close();//CERRAR CONEXION

                  tbsales();//ACTUALIZAR VISTA DE LA TABLA

                 JOptionPane.showMessageDialog(null, "Venta eliminada");//MENSAJE

                  }catch (Exception e){

            System.out.println(e.getCause());//OBTENER ERROR

        }

    }   

 

17. Al botón cancelar  agregar el siguiente código, donde solo llamar al método limpiar.

               limpiar();

18. Por ultimo a nuestro metodo publico tbsales(), agregareos lo siguiente:

public tbsales() {

        initComponents();//INICIAR COMPONENTES

        tbsales();//EJECUTAR VISTA DE LA JTABLE

        btnmodificar.setEnabled(false);//DESHABILITAR BOTON MODIFICAR

    }

Finalmente conseguiremos una ventana similar a la siguiente, y habremos terminado.

Elaborado por: César Adolfo Valenciano Fonseca

Correo: [email protected]


Publicado por cesar_vf20 @ 12:27
Comentarios (0)  | Enviar
Comentarios