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
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.
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.