Prueba N°2 Cliente Servidor

Autor: Daniela Muñoz Muñoz
Competencia: Comunicación Escrita.
Palabras Clave: Programación, Java, NetBeans.

Descripción de la Actividad: A continuación les daré a conocer mi grata experiencia como estudiante de primer año de ingeniería civil en informática, en mi segunda prueba en el ramo  "Cliente Servidor".

El propósito de la prueba consistía en que el usuario ingresaba una sentencia My SQL.. y el programa le imprime lo que hace la sentencia.

Solución
La solución al problema es crear ejemplos sobre la entrada y salida de los datos, analisis de la solucion, diagrama de clases y de actividades, y el desarrollo del código

Ejemplos:



Análisis de la Solución

-ENTRADA = Sentencia My SQL
-PROCESO -Si la sentencia ingresada por el usuario es correcta, se pone en un Preparestatement, luego se ejecuta el Preparestatement en un ResultSet, a continuación tomamos el ResultSet y lo separamos y armamos la JTable el cual nos llevará a la salida.
 -Si la sentencia ingresada por el usuario es incorrecta el ResultSet no dará ningún resultado
-SALIDA= EL resultado de los datos que correspondiente a la sentencia My SQL

Especificación en Diagrama

Diagrama de Clases


Diagrama de Actividad

Código:

/* 
 * Este programa en java, pide una sentencia MySQL de SELECT y la realiza
 * Mostrando los resultados en una JTable.
  */
  
  import java.sql.PreparedStatement;
  import java.sql.ResultSet;
  import java.sql.ResultSetMetaData;
  import java.sql.SQLException;
  import javax.swing.table.DefaultTableModel;
  
  public class GraficaVentana extends javax.swing.JFrame {
  
      public GraficaVentana() {
          initComponents();
      }
  
      @SuppressWarnings("unchecked")
      // <editor-fold defaultstate="collapsed" desc="Generated Code">                         
      private void initComponents() {
  
          BotonAceptar = new javax.swing.JButton();
          jScrollPane1 = new javax.swing.JScrollPane();
          TablaResultado = new javax.swing.JTable();
          Introduccion = new javax.swing.JLabel();
          sentencia = new javax.swing.JTextField();
  
          setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  
          BotonAceptar.setText("Aceptar");
          BotonAceptar.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  BotonAceptarActionPerformed(evt);
              }
          });
  
          TablaResultado.setModel(new javax.swing.table.DefaultTableModel(
              new Object [][] {
  
              },
              new String [] {
  
              }
          ));
          jScrollPane1.setViewportView(TablaResultado);
 
          Introduccion.setText("Ingrese su sentencia SELECT, para realizar la consulta MySQL");
  
          sentencia.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                  sentenciaActionPerformed(evt);
              }
          });
  
          javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
          getContentPane().setLayout(layout);
          layout.setHorizontalGroup(
              layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
              .addGroup(layout.createSequentialGroup()
                  .addGap(24, 24, 24)
                  .addComponent(Introduccion, javax.swing.GroupLayout.PREFERRED_SIZE, 442, javax.swing.GroupLayout.PREFERRED_SIZE)
                  .addContainerGap(99, Short.MAX_VALUE))
                  .addGroup(layout.createSequentialGroup()
                  .addContainerGap()
                  .addComponent(sentencia, javax.swing.GroupLayout.DEFAULT_SIZE, 446, Short.MAX_VALUE)
                  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                  .addComponent(BotonAceptar, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE)
                  .addGap(14, 14, 14))
                  .addGroup(layout.createSequentialGroup()
                  .addContainerGap()
                  .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 545, Short.MAX_VALUE)
                  .addContainerGap())
          );
          layout.setVerticalGroup(
              layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
              .addGroup(layout.createSequentialGroup()
              .addGap(8, 8, 8)
                  .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                      .addComponent(BotonAceptar, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
                      .addGroup(layout.createSequentialGroup()
                          .addComponent(Introduccion)
                          .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                          .addComponent(sentencia, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                  .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                  .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 119, javax.swing.GroupLayout.PREFERRED_SIZE)
                  .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
          );
  
          pack();
      }// </editor-fold>                       
  
      private void BotonAceptarActionPerformed(java.awt.event.ActionEvent evt) {                                            
          try {
              //creacion modelo de la JTable
              DefaultTableModel ModeloTabla1 = new DefaultTableModel();
              //Coneccion con MySQL
              ConexionMysql cmy = new ConexionMysql();

             PreparedStatement ps;
             //Obtenemos la sentencia del usuario
             String sql = sentencia.getText();
             //Preparamos el envio de la sentencia
             ps = cmy.getConexionMysql().prepareStatement(sql);
             //Guardamos el resultado
             ResultSet rs = ps.executeQuery();
             ResultSetMetaData metaDatos;

             metaDatos = rs.getMetaData();

             // Se obtiene el número de columnas.
             int numeroColumnas = metaDatos.getColumnCount();
             // Se crea un array de etiquetas para rellenar
             Object[] etiquetas = new Object[numeroColumnas];

             // Se obtiene cada una de las etiquetas para cada columna
             for (int i = 0; i < numeroColumnas; i++) {
                 // Nuevamente, para ResultSetMetaData la primera columna es la 1.
                 etiquetas[i] = metaDatos.getColumnLabel(i + 1);
             }
             ModeloTabla1.setColumnIdentifiers(etiquetas);
             // Bucle para cada resultado en la consulta
             while (rs.next()) {
                 // Se crea un array que será una de las filas de la tabla.
                 Object[] fila = new Object[numeroColumnas]; // numero columnas en la tabla

                 // Se rellena cada posición del array con una de las columnas de la tabla en base de datos.
                 for (int j = 0; j < numeroColumnas; j++) {
                     fila[j] = rs.getObject(j + 1); // El primer indice en rs es el 1, no el cero, por eso se suma 1.
                 }
                 // Se añade al modelo la fila completa.
                 ModeloTabla1.addRow(fila);
             }
             //aplicamos todos los cambio a la jTable
             TablaResultado.setModel(ModeloTabla1);
             cmy.closeConexionMysql();
         } catch (SQLException ex) {
         }

     }                                           

     private void sentenciaActionPerformed(java.awt.event.ActionEvent evt) {                                         
     }                                        
     // Variables declaration - do not modify                    
     private javax.swing.JButton BotonAceptar;
     private javax.swing.JLabel Introduccion;
     private javax.swing.JTable TablaResultado;
     private javax.swing.JScrollPane jScrollPane1;
     private javax.swing.JTextField sentencia;
     // End of variables declaration                  
 }









 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.SQLException;
 
 public class ConexionMysql {
 
     private Connection CnxMysql;
 
     public ConexionMysql() {
         this.CnxMysql = conectar();
     }
 
     private Connection conectar() {
         try {
             // Inicializar y registrar el Driver
             Class.forName("com.mysql.jdbc.Driver");
 
 
             // linea en donde se concreta la conexión con la Base de Datos.
             Connection conMysql =
                     (Connection) DriverManager.getConnection(
                     "jdbc:mysql://db.inf.uct.cl:3306/pbello2011", // puede ser ip o localhost :)
                     "pbello2011",
                     "181495073");
 
 
             return conMysql;
         } catch (Exception ex) {
             // Si excurre algún Error, al intentar la conexión se ejecutará este ambito.
 
             return null;
         }
     }//fin del metodo conectar
 
     public Connection getConexionMysql() {
         return this.CnxMysql;
     }
 
     public void closeConexionMysql() {
         try {
 
             this.CnxMysql.close();
         } catch (SQLException ex) {
         }
     }
 }

public class Problema1 {
 
     /**
      * @param args the command line arguments
      */
     public static void main(String args[]) {
         /* 
          * 
          */
         try {
             for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                 if ("Nimbus".equals(info.getName())) {
                     javax.swing.UIManager.setLookAndFeel(info.getClassName());
                     break;
                 }
             }
         } catch (ClassNotFoundException ex) {
             java.util.logging.Logger.getLogger(GraficaVentana.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
         } catch (InstantiationException ex) {
             java.util.logging.Logger.getLogger(GraficaVentana.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
         } catch (IllegalAccessException ex) {
             java.util.logging.Logger.getLogger(GraficaVentana.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
         } catch (javax.swing.UnsupportedLookAndFeelException ex) {
             java.util.logging.Logger.getLogger(GraficaVentana.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
         }
         //</editor-fold>
 
         /* Create and display the form */
         java.awt.EventQueue.invokeLater(new Runnable() {
 
             @Override
             public void run() {
                 new GraficaVentana().setVisible(true);
             }
         });
     }
 }


Reflexión
Lo enunciado anteriormente corresponde a una de las partes de la Prueba de Cliente servidor, tienes complicaciones ya que esta hecha con interfaz gráfica, es todo lo que hemos visto sobre el tema.
Lo mencionado corresponde principalmente a sentencias de My SQl ocupadas desde NetBeans. Una forma de programas desde un Cliente que seria NetBeans y mandarle la sentencia a un servidos el cual seria My SQL el cual nos respondera con una respuesta de la sentencia ingresada.