Package org.sfsoft.sentenciassql.gui

Source Code of org.sfsoft.sentenciassql.gui.SentenciasSQL

package org.sfsoft.sentenciassql.gui;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

import org.sfsoft.sentenciassql.base.Personaje;
import org.sfsoft.sentenciassql.util.Database;

import static org.sfsoft.sentenciassql.util.Constantes.AccionDialogo;

/**
* Ejemplo que consulta y lanza sentencias de inserci�n, modificaci�n y eliminaci�n contra una Base de Datos
* MySQL utilizando el driver JDBC.
*  - Se emplea la clase PreparedStatement en lugar de Statement
*  - Permite seleccionar de un ComboBox la Base de Datos con la que el usuario desea conectar
*   - Invoca a una funci�n almacenada de MySQL para mostrar la puntuaci�n total de los personajes
*  - Invoca a un procedimiento almaceado para eliminar todos los personajes
* @author Santiago Faci
* @version 1.0
*/
public class SentenciasSQL {

  private JFrame frmSentenciasSql;
  private JMenuBar menuBar;
  private JMenu mnServidor;
  private JMenuItem mntmConectar;
  private JMenuItem mntmDesconectar;
  private JMenuItem mntmSalir;
  private JPanel panelBuscar;
  private JTextField txtFiltro;
  private JButton btBuscar;
  private JScrollPane scrollPane;
  private JTablaDatos tablaDatos;
  private JButton btCancelar;
  private JPanel panelDatos;
  private JPanel panelSuperior;
  private JPanel panelInferior;
  private JButton btNuevo;
  private JButton btModificar;
  private JButton btEliminar;
  private JLabel lbTotalPuntos;
  private JButton btEliminarTodos;
 
  private Connection conexion;
  private AccionDialogo accion;
  public static Database database;

  /**
   * Launch the application.
   */
  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      public void run() {
        try {
          SentenciasSQL window = new SentenciasSQL();
          window.frmSentenciasSql.setVisible(true);
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    });
  }

  /**
   * Create the application.
   */
  public SentenciasSQL() {
    initialize();
    inicializar();
  }
 
  /*
   * Inicializa algunos aspectos del interfaz antes de que el usuario tome el cotnrol del mismo
   */
  private void inicializar() {
   
    // Coloca el JFrame en el centro de la pantalla. Tambi�n funciona con JDialog
    frmSentenciasSql.setLocationRelativeTo(null);
  }
 
  /*
   * Carga el driver JDBC para MySQL y conecta con el SGBD
   */
  private void conectar() {
   
    JConecta jConecta = new JConecta();
    if (jConecta.mostrarDialogo() == AccionDialogo.CANCELAR)
      return;
   
    String servidor = jConecta.getServidor();
    String baseDatos = jConecta.getBaseDatos();
    String usuario = jConecta.getUsuario();
    String contrasena = jConecta.getContrasena();
   
    try {
      Class.forName("com.mysql.jdbc.Driver").newInstance();
      conexion = DriverManager.getConnection("jdbc:mysql://" + servidor + ":3306" + "/" + baseDatos,
          usuario, contrasena);
      JOptionPane.showMessageDialog(null, "Se ha conectado con �xito");
     
      database = new Database(conexion);
     
      cargarDatos();
     
      activarControles();
     
    } catch (ClassNotFoundException cnfe) {
      JOptionPane.showMessageDialog(null, "No se ha podido cargar el driver de la Base de Datos");
    } catch (SQLException sqle) {
      JOptionPane.showMessageDialog(null, "No se ha podido conectar con la Base de Datos");
      sqle.printStackTrace();
    } catch (InstantiationException ie) {
      ie.printStackTrace();
    } catch (IllegalAccessException iae) {
      iae.printStackTrace();
    }
  }
 
  /*
   * Desconecta de MySQL
   */
  private void desconectar() {
   
    try {
      conexion.close();
      conexion = null
     
      JOptionPane.showMessageDialog(null, "Se ha desconectado de la Base de Datos");
     
      desactivarControles();
      tablaDatos.vaciar();
    } catch (SQLException sqle) {
      sqle.printStackTrace();
    }
  }
 
  /*
   * Sale de la aplicaci�n
   */
  private void salir() {
   
    desconectar();
    System.exit(0);
  }
 
  /*
   * Carga los datos en la tabla, seg�n la Base de Datos a la que ha conectado el usuario
   */
  private void cargarDatos() {
   
    try {
      tablaDatos.listar();
     
      if (tablaDatos.getRowCount() == 0)
        JOptionPane.showMessageDialog(null, "No hay datos que mostrar");
     
      mostrarPuntuacionTotal();
    } catch (SQLException sqle) {
      sqle.printStackTrace();
    }
  }
 
  /*
   * Muestra la puntuaci�n total invocando a una funci�n almacenada de MySQL
   */
  private void mostrarPuntuacionTotal() throws SQLException {
   
    String puntos = database.ejecutarFuncion("get_puntos_total");
   
    if (puntos.equals(""))
      lbTotalPuntos.setText("Total Puntos: 0");
    else
      lbTotalPuntos.setText("Total Puntos: " + puntos);
  }
 
  /*
   * Realiza la b�squeda seg�n el filtro introducido por el usuario en la caja de texto
   */
  private void buscar() {
   
    if (txtFiltro.getText().length() == 0) {
      cargarDatos();
      return;
    }
   
    if (txtFiltro.getText().length() < 2)
      return;
   
    try {
      this.tablaDatos.listar(txtFiltro.getText());
    } catch (SQLException sqle) {
      sqle.printStackTrace();
    }
  }
 
  /*
   * El usuario cancela el filtrado de datos. Vuelven a mostrarse todos los registros en la tabla
   */
  private void cancelarBusqueda() {
   
    this.txtFiltro.setText("");
    cargarDatos();
  }
 
  /*
   * Da de alta un nuevo personaje
   */
  private void nuevo() {
   
    JPersonaje jPersonaje = new JPersonaje();
    if (jPersonaje.mostrarDialogo() == AccionDialogo.CANCELAR)
      return;
   
    Personaje personaje = jPersonaje.getPersonaje();
   
    try {
      if (database.existePersonaje(personaje.getNombre())) {
        JOptionPane.showMessageDialog(null, "Ya existe un personaje con este nombre", "Alta",
            JOptionPane.ERROR_MESSAGE);
        return;
      }
     
      database.nuevoPersonaje(personaje);
      cargarDatos();
    } catch (SQLException sqle) {
      JOptionPane.showMessageDialog(null, "No se ha podido registrar el personaje.\n"
          + "Se ha producido un error", "Alta", JOptionPane.ERROR_MESSAGE);
     
      sqle.printStackTrace();
    }
  }
 
  /*
   * Modifica la informaci�n del personaje que el usuario ha seleccionado en la tabla
   */
  private void modificar() {
   
    int filaSeleccionada = 0;
   
    filaSeleccionada = tablaDatos.getSelectedRow();
    if (filaSeleccionada == -1)
      return;
   
    try {
     
      Personaje personaje = tablaDatos.getPersonajeSeleccionado();
     
      JPersonaje jPersonaje = new JPersonaje();
      jPersonaje.setPersonaje(personaje);
 
      if (jPersonaje.mostrarDialogo() == AccionDialogo.CANCELAR)
        return;
     
      personaje = jPersonaje.getPersonaje();
   
      String nombreOriginal =
          (String) tablaDatos.getValueAt(filaSeleccionada, 0);
     
      // Si ha modificado el nombre hay que comprobar que el nuevo nombre no exista ya
      if (!nombreOriginal.equals(personaje.getNombre()))
        if (database.existePersonaje(personaje.getNombre())) {
          JOptionPane.showMessageDialog(null, "Ya existe un personaje con este nombre", "Alta",
              JOptionPane.ERROR_MESSAGE);
          return;
        }
     
      database.modificarPersonaje(nombreOriginal, personaje);
      cargarDatos();
    } catch (SQLException sqle) {
      JOptionPane.showMessageDialog(null, "No se ha podido modificar el personaje\n"
          + "Se ha producido un error", "Modificar", JOptionPane.ERROR_MESSAGE);
      sqle.printStackTrace();
   
  }
 
  /*
   * El usuario elimina el personaje que ha seleccionado de la tabla
   */
  private void eliminar() {
 
    if (JOptionPane.showConfirmDialog(null, "�Est� seguro?", "Eliminar", JOptionPane.YES_NO_OPTION) ==
        JOptionPane.NO_OPTION)
      return;
   
    try {
      tablaDatos.eliminar();
     
      JOptionPane.showMessageDialog(null, "El personaje se ha eliminado correctamente");
     
      cargarDatos();
     
    } catch (SQLException sqle) {
      JOptionPane.showMessageDialog(null, "No se ha podido eliminar el personaje.\n" +
          "Se ha producido un error", "Eliminar", JOptionPane.ERROR_MESSAGE);
      sqle.printStackTrace();
    }
  }
 
  /*
   * Elimina todos los personajes de la Base de Datos utilizando un procedimiento almacenado
   */
  private void eliminarTodos() {
   
    if (JOptionPane.showConfirmDialog(null, "�Est� seguro?", "Eliminar", JOptionPane.YES_NO_OPTION) ==
        JOptionPane.NO_OPTION)
      return;
   
    try {
      database.ejecutarProcedimiento("eliminar_todos");
     
      cargarDatos();
    } catch (SQLException sqle) {
      sqle.printStackTrace();
    }
  }
 
  /*
   * Activa los controles del interfaz de usuario
   */
  private void activarControles() {
   
    this.txtFiltro.setEnabled(true);
    this.btBuscar.setEnabled(true);
    this.btCancelar.setEnabled(true);
    this.btNuevo.setEnabled(true);
    this.btModificar.setEnabled(true);
    this.btEliminar.setEnabled(true);
    this.btEliminarTodos.setEnabled(true);
   
    mntmConectar.setEnabled(false);
    mntmDesconectar.setEnabled(true);
  }
 
  /*
   * Desactiva los controles del interfaz de usuario
   */
  private void desactivarControles() {
   
    this.txtFiltro.setEnabled(false);
    this.btBuscar.setEnabled(false);
    this.btCancelar.setEnabled(false);
    this.btNuevo.setEnabled(false);
    this.btModificar.setEnabled(false);
    this.btEliminar.setEnabled(false);
    this.btEliminarTodos.setEnabled(false);
   
    mntmConectar.setEnabled(true);
    mntmDesconectar.setEnabled(false);
  }

  /**
   * Initialize the contents of the frame.
   */
  private void initialize() {
    frmSentenciasSql = new JFrame();
    frmSentenciasSql.setTitle("Sentencias SQL");
    frmSentenciasSql.setBounds(100, 100, 450, 300);
    frmSentenciasSql.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   
    menuBar = new JMenuBar();
    frmSentenciasSql.setJMenuBar(menuBar);
   
    mnServidor = new JMenu("Servidor");
    menuBar.add(mnServidor);
   
    mntmConectar = new JMenuItem("Conectar");
    mntmConectar.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        conectar();
      }
    });
    mnServidor.add(mntmConectar);
   
    mntmDesconectar = new JMenuItem("Desconectar");
    mntmDesconectar.setEnabled(false);
    mntmDesconectar.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        desconectar();
      }
    });
    mnServidor.add(mntmDesconectar);
   
    mntmSalir = new JMenuItem("Salir");
    mntmSalir.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        salir();
      }
    });
    mnServidor.add(mntmSalir);
   
    panelSuperior = new JPanel();
    frmSentenciasSql.getContentPane().add(panelSuperior, BorderLayout.NORTH);
    panelSuperior.setLayout(new BorderLayout(0, 0));
   
    panelBuscar = new JPanel();
    panelSuperior.add(panelBuscar, BorderLayout.NORTH);
   
    panelDatos = new JPanel();
    panelSuperior.add(panelDatos, BorderLayout.SOUTH);
   
    panelInferior = new JPanel();
    frmSentenciasSql.getContentPane().add(panelInferior, BorderLayout.SOUTH);
   
    lbTotalPuntos = new JLabel("Total Puntos:");
    panelInferior.add(lbTotalPuntos);
   
    btNuevo = new JButton("Nuevo");
    btNuevo.setEnabled(false);
    btNuevo.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        nuevo();
      }
    });
    panelDatos.add(btNuevo);
   
    btModificar = new JButton("Modificar");
    btModificar.setEnabled(false);
    btModificar.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        modificar();
      }
    });
    panelDatos.add(btModificar);
   
    btEliminar = new JButton("Eliminar");
    btEliminar.setEnabled(false);
    btEliminar.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        eliminar();
      }
    });
    panelDatos.add(btEliminar);
   
    btEliminarTodos = new JButton("Eliminar Todos");
    btEliminarTodos.setEnabled(false);
    btEliminarTodos.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        eliminarTodos();
      }
    });
    panelDatos.add(btEliminarTodos);
   
    txtFiltro = new JTextField();
    txtFiltro.setEnabled(false);
    txtFiltro.addKeyListener(new KeyAdapter() {
      @Override
      public void keyReleased(KeyEvent e) {
        buscar();
      }
    });
    panelBuscar.add(txtFiltro);
    txtFiltro.setColumns(10);
   
    btBuscar = new JButton("Buscar");
    btBuscar.setEnabled(false);
    btBuscar.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent arg0) {
        buscar();
      }
    });
    panelBuscar.add(btBuscar);
   
    btCancelar = new JButton("X");
    btCancelar.setEnabled(false);
    btCancelar.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        cancelarBusqueda();
      }
    });
    panelBuscar.add(btCancelar);
   
    scrollPane = new JScrollPane();
    frmSentenciasSql.getContentPane().add(scrollPane, BorderLayout.CENTER);
   
    tablaDatos = new JTablaDatos();
    scrollPane.setViewportView(tablaDatos);
  }

}
TOP

Related Classes of org.sfsoft.sentenciassql.gui.SentenciasSQL

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.