miércoles, 7 de diciembre de 2016










1  .    CONTENIDO

PREPAREDSTATEMENT

La interface PreparedStatement hereda de Statement y difiere de esta en dos maneras.
• Las instancias de PreparedStatement contienen una sentencia SQL que ya ha sido compilada. Esto es lo que hace que se le llame ‘preparada’.
• La sentencia SQL contenida en un objeto PreparedStatement pueden tener uno o más parámetros IN. Un parámetro IN es aquel cuyo valor no se especifica en la sentencia SQL cuando se crea. En vez de ello la sentencia tiene un interrogante (‘?’) como un ‘encaje’ para cada parámetro IN. Debe suministrarse un valor para cada interrogante mediante el método apropiado setXXX antes de ejecutar la sentencia.
Como los objetos PreparedStatement están precompilados, su ejecución es más rápida que los objetos Statement. Consecuentemente, una sentencia SQL que se ejecute muchas veces a menudo se crea como PreparedStatement para incrementar su eficacia.
Siendo una subclase de Statement, PreparedStatement hereda toda la funcionalidad de Statement. Además, se añade un set completo de métodos necesarios para fijar los valores que van a ser enviados a la base de datos en el lugar de los ‘encajes’ para los parámetros IN. También se modifican los tres métodos execute, executeQuery y executeUpdate de tal forma que no toman argumentos. Los formatos de Statement de estos métodos (los formatos que toman una sentencia SQL como argumento) no deberían usarse nunca con objetos PreparedStatement. 


La interfaz PreparedStatement hereda de Statement y difiere de esta en dos maneras.

Las instancias de PreparedStatement contienen una sentencia SQL que ya ha sido compilada. Esto es lo que hace que se le llame ‘preparada’.

La sentencia SQL contenida en un objeto PreparedStatement pueden tener uno o más parámetros IN. Un parámetro IN es aquel cuyo valor no se especifica en la sentencia SQL cuando se crea. En vez de ello la sentencia tiene un interrogante (‘?’) como un ‘ancla’ para cada parámetro IN. Debes suministrar un valor para cada interrogante mediante el método apropiado, que puede ser: setInt, setString, etc, antes de ejecutar la sentencia.

Creada por el método prepareStatement - Un objeto PreparedStatement se usa para sentencias SQL que toman uno o más parámetros como argumentos de entrada (parámetros IN).

PreparedStatement tiene un grupo de métodos que fijan los valores de los parámetros IN, los cuales son enviados a la base de datos cuando se procesa la sentencia SQL.

Las Instancias de PreparedStatement extienden, es decir, heredan de Statement y por tanto heredan los métodos de Statement. Un objeto PreparedStatement es potencialmente más eficiente que un objeto Statement porque este ha sido precompilado y almacenado para su uso futuro.

Son muy útiles cuando una sentencia SQL se ejecuta muchas veces cambiando sólo algunos valores.

Se utiliza para enviar sentencias SQL pre compiladas con uno o más parámetros.

Se crea un objeto PreparedStatement especificando la plantilla y los lugares donde irán los parámetros.

Los parámetros son especificados después utilizando los métodos setXXX(.) indicando el número de parámetro y el dato a insertar en la sentencia.

La sentencia SQL y los parámetros se envían a la base de datos cuando se llama al método: executeXXX()

Creación de objetos PreparedStatement

El siguiente ejemplo, donde con es un objeto Connection, crea un objeto PreparedStatement conteniendo una sentencia SQL con dos ‘encajes’ para parámetros IN.
PreparedStatement pstmt = con.prepareStatement(
"UPDATE table4 SET m = ? WHERE x = ?");
El objeto pstmt contiene ahora la sentencia “UPDATE table4 SET m= ? WHERE x = ? “, que ya ha sido enviada a la base de datos y ha sido preparada para su ejecución.

Los métodos de interfaz PreparedStatement

A continuación, se dan los métodos importantes de la interfaz PreparedStatement:


Uso del método PreparedStatement.executeQuery 

Para obtener datos de una tabla utilizando una sentencia SELECT con marcadores de parámetros, utilice el método PreparedStatement.executeQuery. Este método devuelve una tabla de resultados en un objeto ResultSet. Una vez obtenida la tabla de resultados, debe utilizar métodos de ResultSet para desplazarse por la tabla de resultados y obtener los valores de cada columna de cada fila.
7 Con el Controlador JDBC universal de DB2, también puede utilizar el método 7 PreparedStatement.executeQuery para obtener un conjunto de 7 resultados de una llamada de procedimiento almacenado, si ese 7 procedimiento almacenado devuelve un solo conjunto de resultados y 7 tiene solamente parámetros de entrada. 7 Si el procedimiento almacenado devuelve varios conjuntos de 7 resultados, debe utilizar el método Statement.execute. 7 Consulte el tema Obtención de 7 varios conjuntos de resultados de un procedimiento almacenado en una 7 aplicación JDBC para 7 obtener más información.
Para obtener filas de una tabla utilizando una sentencia SELECT con marcadores de parámetros, siga estos pasos:
  1. Invoque el método Connection.prepareStatement para crear un objeto PreparedStatement.
  2. Invoque métodos PreparedStatement.setXXX para pasar valores a los parámetros de entrada.
  3. Invoque el método PreparedStatement.executeQuery para obtener la tabla de resultados de la sentencia SELECT en un objeto ResultSet.
  4. En un bucle, posicione el cursor utilizando el método ResultSet.next y recupere datos de cada columna de la fila actual del objeto ResultSet utilizando métodos getXXX.
  5. Invoque el método ResultSet.close para cerrar el objeto ResultSet.
  6. Invoque el método PreparedStatement.close para cerrar el objeto PreparedStatement cuando termine de utilizar ese objeto.
USO DE CALLABLESTATEMENT

Para el método executeUpdate, una sentencia se completa cuando se ejecuta. En los raros casos en que se llama al método execute, de cualquier modo, no se completa hasta que los result sets o update counts que se generan han sido devueltos.

Ejemplos
El siguiente fragmento de código, donde con es un objeto Connection, crea un objeto PreparedStatement que contiene una instrucción SQL:
//Creamos un objeto PreparedStatement desde el objeto Connection
PreparedStatement ps = con.prepareStatement(
"select * from Propietarios where DNI=? AND NOMBRE=? AND EDAD=?");
//Seteamos los datos al prepared statement de la siguiente forma:
ps.setString(1, dni);
ps.setString(2, nombre);
ps.setInt(3, edad);
//Ejecutamos el PreparedStatement, en este caso con executeQuery()
ResultSet rs= ps.executeQuery();
Ejemplo de PreparedStatement de consulta
Por ejemplo, supongamos que hay un campo de texto en el que el usuario puede introducir su dirección de correo electrónico y con este dato se desea buscar al usuario:
Connection con = DriverManager.getConnection(url);
String consulta = "SELECT usuario FROM registro WHERE email like ?";
PreparedStatement pstmt = con.prepareStatement(consulta);
pstmt.setString(1 , campoTexto.getText());
ResultSet resultado = ps.executeQuery();
Ejemplo de PreparedStatement de modificación

En el siguiente ejemplo se va a insertar un nuevo registro en una tabla:
Connection con = DriverManager.getConnection(url);
String insercion = "INSERT INTO registro(usuario , email , fechaNac) values ( ? , ? , ? )");
PreparedStatement pstmt = con.prepareStatement(consulta);
String user = . . . ;
String email = . . . ;
Date edad = . . . ; //O int edad;
pstmt.setString(1 , user);
pstmt.setString(2 , email);
pstmt.setDate(3 , edad); // setInt(3, edad);
ps.executeUpdate();

Ejemplo de interfaz PreparedStatement que inserta el registro

En primer lugar, crear la tabla que figura a continuación:
crear tabla EMP (número de identificación ( 10 ), nombre varchar2 ( 50 ));  
Ahora insertar registros en esta tabla por el código que figura a continuación:
importar java.sql. *;  
clase  InsertPrepared {  
públicas estáticas void  principales (args String []) {    
tratar {  
Class.forName ( "oracle.jdbc.driver.OracleDriver" );  

Conexión con = DriverManager.getConnection ( "jdbc: oracle: thin: @localhost: 1521: xe" , "sistema" , "Oracle" );  
  
PreparedStatement prop = con.prepareStatement ( "insertar en los valores Vac (,)??" );  
stmt.setInt ( 1 , 101 ); // 1 especifica el primer parámetro de la consulta  
stmt.setString ( 2 , "Ratan" );  
  
int  i = stmt.executeUpdate ();  
System.out.println (i + "registros insertados" );  
  
con.close ();  
  
} Catch (Exception e) {System.out.println (e);}  
  }  
}  

2  .  RESUMEN

Este interfaz, al igual que el interfaz Statement, nos permite ejecutar sentencias SQL sobre una conexión establecida con una base de datos.
Pero en este caso vamos a ejecutar sentencias SQL más especializadas, estas sentencias SQL se van a denominar sentencias SQL precompiladas y van a recibir parámetros de entrada.
El interfaz PreparedStatement hereda del interfaz Statement y se diferencia de él de dos maneras:
• Las instancias de PreparedStatement contienen sentencias SQL que ya han sido compiladas.
Esto es lo que hace a una sentencia "prepared” (preparada).
La sentencia SQL que contiene un objeto PreparedStatement puede contener uno o más parámetros de entrada.
Un parámetro de entrada es aquél cuyo valor no se especifica cuando la sentencia es creada, en su lugar la sentencia va a tener un signo de interrogación (?) por cada parámetro de entrada.
Uso de callablestatement El último tipo de sentencias que podemos utilizar en JDBC son las sentencias CallableStatement.
Este interfaz hereda del interfaz PreparedStatement y ofrece la posibilidad de manejar parámetros de salida y de realizar llamadas a procedimientos almacenados de la base de datos. Un procedimiento almacenado se encuentra dentro de una base de datos; la llamada a un procedimiento es lo que contiene un objeto CallableStatement.

3      SUMARY

This interface, like the Statement interface, allows us to execute SQL statements over a connection established with a database.
But in this case we will execute more specialized SQL statements, these SQL statements are going to be called precompiled SQL statements and will receive input parameters.
The PreparedStatement interface inherits from the Statement interface and differs from it in two ways:
• The PreparedStatement instances contain SQL statements that have already been compiled.
This is what makes a "prepared" statement.
The SQL statement that contains a PreparedStatement object may contain one or more input parameters.
An input parameter is one whose value is not specified when the statement is created, instead the statement will have a question mark (?) For each input parameter.
Using callablestatement The last type of statements we can use in JDBC are the CallableStatement statements.
This interface inherits from the PreparedStatement interface and offers the possibility of handling output parameters and making calls to database stored procedures. A stored procedure is inside a database; The call to a procedure is what a CallableStatement object contains.

4 .   RECOMENDACIONES

Usar al máximo sentencias de base de datos precompiladas a través de la clase PreparedStatement cuando ejecute sentencias SQL. Esto evita que la base de datos compile varias veces la misma consulta y agiliza le ejecución de la sentencia.
Los PreparedStatement, también está el tema de seguridad. Con PreparedStatement evitamos tener que chequear y "escapar" los caracteres conflictivos en las cadenas de texto que vamos a insertar en base de datos. Si vamos a insertar un nombre de usuario que pedimos al usuario y a este se le ocurre poner una comilla simple, por ejemplo "O’Donnell", podemos meterla tal cual, en un PreparedStatement, pero necesitamos "escapar" la comilla antes de usarla en un Statement.

5  .   CONCLUSIONES

La definición de PreparedStatement dice que es una sentencia SQL precompilada para ser ejecutada muchas veces. Pero al crear el PreparedStatement cada vez, se está precompilando y ejecutando. Perdiendo completamente la ventaja en rendimiento que supone el precompilado de una sentencia SQL. Hay algunos manejadores que inclusive crean un procedimiento almacenado temporal, cada vez que se crea un PreparedStatement. 

Un objeto PreparedStatement es potencialmente más eficiente que un objeto Statement porque este ha sido precompilado y almacenado para su uso futuro.


6  .   APRECIACION DEL EQUIPO

Una Prepared Statement es una sentencia SQL de base de datos precompilada. Al estar precompilada, su ejecución será más rápida que una SQL normal, por lo que es adecuada cuando vamos a ejecutar la misma sentencia SQL (con distintos valores) muchas veces.

7.   GLOSARIO DE TERMINOS

       Sentencias: son los elementos básicos en los que se divide el código en un lenguaje de programación. Al fin y al cabo, un programa no es más que un conjunto de sentencias que se ejecutan para realizar una cierta tarea. 

Parámetros:  es una variable utilizada para recibir valores de entrada en una rutina o subrutina. Dichos valores, que serán enviados desde la rutina invocante, son llamados argumentos.

Interfaz: es un conjunto de subrutinas, funciones y procedimientos (o métodos, en la programación orientada a objetos) que ofrece cierta biblioteca para ser utilizado por otro software como una capa de abstracción.

Sentencias compiladas: puede contener sentencias de control SQL y sentencias SQL. Las sentencias SQL compuestas (compiladas) se pueden utilizar para implementar la lógica de procedimiento a través de una secuencia de sentencias SQL con un ámbito local para variables, condiciones, cursores y manejadores.
DBMS:  database management system  que permiten almacenar y posteriormente acceder a los datos de forma rápida y estructurada.

8  .   LINKOGRAFIA


 AQUI EL LINK DE LA DIAPOSITIVAS DEL TEMA




lunes, 28 de noviembre de 2016

EL CONTROL JTABLE CON BASE DE DATOS
















  1.    CONTENIDO

      CONTROL JTABLE CON BASE DE DATOS

Jtable es una clase que me permite organizar una determinada información en tabla, esta difiere de una base de datos normal porque al utilizar Jtable tu puedes visualizar esta tabla, brindándole a el usuario organización de información, oportunidades de editar y cambiar el tamaño de las columnas entre otras.
Como programadores, sabemos muy bien que la presentación de datos tabulados es una de las tareas más comunes que se presentan al momento de crear interfaces gráficas; desde la simple tabla que permite únicamente mostrar el resultado de una consulta, hasta las que permiten editar directamente el contenido de cada celda, ordenar las columnas, personalizar su apariencia, etc. Todas las tareas antes descritas, y muchas otras, son posibles de realizar utilizando la clase JTable; por supuesto, mientras más complejo sea el requerimiento a cubrir, se requerirá en igual medida utilizar más métodos o recursos de la clase.
Los modelos de tabla son objetos que implementan la interface TableModel; a través de
ellos es posible personalizar mucho más y mejor el comportamiento de los componentes
Jtable, permitiendo utilizar al máximo sus potencialidades.
El siguiente gráfico intenta mostrar como cada componente JTable obtiene siempre sus
datos desde un modelo de tabla.



INICIOS DE JTABLE

En principio se creo la clase Jtable para constituir un interfaz ligado a bases de datos a través de "Java Database Connectivity" (JDBC), y así evita la complejidad que existía par el manejo de datos, dando así al programador mucha mas facilidad a la hora de trabajar con este tipo de información.
Jtable le da al programador muchas facilidades, pues este posee varias características que permiten hacer desde tablas con información compleja y muy estructurada hasta tablas con información sencilla y "básica".

INFORMACIÓN Y  COLUMNAS

Jtable te brinda muchas facilidades para poder crear una table, y así mismo de llenarla con la información que desees ( números, letras etc...) por lo que sencillamente dentro de una tabla esta automáticamente a través de la información debidamente separada - por ""(comillas) o por , (coma) - es capaz de contabilizarlas y al mismo tiempo llenarla con la información que se le dio; es decir el programador solo se debe encargar de poner los títulos de las tablas y así mismo de escribir la información en el mismo orden en que desee que salga de acuerdo con los títulos y Jtable se encargara automáticamente de   colocar la información donde se le indico.

PROPIEDADES

Propiedad más usada:
● Model: Permite definir el número de columnas y filas del objeto como también las
expresiones que irán en las columnas.
Métodos más usados:
● addColumn(): Añade la columna al final de la matriz de columnas.
setModel(): Asigna el modelo de datos al objeto JTable.
GetRowCount(): Devuelve el número de filas en la tabla.


DefaultTableModel

Esta clase permite construir el modelo para el objeto Table. Los métodos más utilizados
son:
● addColumn(): Añade una columna al modelo.
● AddRow(): Añade una fila al final del modelo.
● getColumnCount(): Devuelve el número de columnas en esta tabla de datos.
● getRowCount(): Devuelve el número de filas en esta tabla de datos.
● getValueAt():  Devuelve  un  valor  de  atributo  para  la  celda  en  la  posición  row,
column.
● insertRow(): Inserta una fila en el modelo.

TABLE MODEL

La clase Jtable controla como se presentan los datos, siendo el TableModel quien controla los datos sí mismos. para crear una Jtable habrá pues que crear un TableModel antes, normalmente. TableModel lo que hace es predeterminar ciertas características para el Jtable es decir que tu puedes poner ciertos parámetros dentro de un TableModel y así no tener que determinarlos siempre. TableModel es un programa que guarda los datos de la tabla para si mismo, es decir, puede tener la información de la tabla pero estos datos son los visualizados por el computador, es decir, para visualizar una tabla el TABLEMODEL puede tener la información pero sin el Jtable no se puede visualizar para el usuario.


La clase AbstractTableModel es la que implementa directamente a la interface
TableModel, aunque es esta clase la que se recomienda extender para utilizarla como
modelo de tabla, existe un modelo de tabla predeterminado que facilita mucho el trabajo
con tablas. Este modelo predeterminado es la clase DefaultTableModel.

JTable es un componente swing java que nos permite mostrar datos en una tabla de una base de datos, sin embargo a diferencia de otros componentes similares de otros lenguajes de programación (Delphi por ejemplo), java no nos permite gestionar directamente los datos. Es eso lo que haremos hoy, construir un JTable editable, más propiamente, este JTable nos permitirá actualizar datos de una JTable directamente con la base de datos.


 JTABLE EDITABLE

Jtable tiene una característica muy llamativa, este permite que el programador pueda decirdir que se edita y que no, sin embargo si el programador dentro de su programa o de su TABLEMODEL no tiene determinado este aspecto, Jtable automáticamente hace editable las celdas dentro de la tabla. Existen varias maneras de hacer editable o no las celdas dentro de la tabla, para ver estos comandos tu te puedes dirigir a Dentro de las celdas encontradas en una tabla se puede permitir al usuario editar o no editar según lo desee el programador, esta propiedad se puede arreglar desde el table model o directamente y/o desde el programa. Jtable tiene la propiedad de dejar editable las celdas si no encuentra nada que hable de esto.


EJEMPLOS:
1.              
public class Ejm1_LlenarJTableDesdeDataBase extends JFrame{
    DefaultTableModel dtmEjemplo;
    JTable tblEjemplo;
    JScrollPane scpEjemplo;
    public Ejm1_LlenarJTableDesdeDataBase()
    {
        tblEjemplo = new JTable();
        scpEjemplo= new JScrollPane();
        //Llenamos el modelo
        dtmEjemplo = new DefaultTableModel(null,getColumnas());
        setFilas();
        tblEjemplo.setModel(dtmEjemplo);
        scpEjemplo.add(tblEjemplo);
        this.add(scpEjemplo);
        this.setSize(500, 200);
        scpEjemplo.setViewportView(tblEjemplo);
        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); }
    //Encabezados de la tabla
    private String[] getColumnas()
    {
          String columna[]=new String[]{"Columna1","Columna2","Columna3"};
          return columna;
    }
    private void setFilas()
    {
        //Conectar a PostgreSQL\\
        Ejm12_1_ConectarPostgreSQL cnndb = new Ejm12_1_ConectarPostgreSQL();
        CachedRowSet crs = cnndb.Function("SELECT deptno, dname, loc FROM dept");
        Object datos[]=new Object[3]; //Numero de columnas de la tabla
        try {
            while (crs.next()) {
                for (int i = 0; i < 3; i++) {
                        datos[i] = crs.getObject(i + 1);
                }
                dtmEjemplo.addRow(datos);
            }
            crs.close();
        } catch (Exception e) {
        }
    }
    public static void main(String args[]) {
        Ejm13_LlenarJTableDesdeDataBase obj1 = new Ejm13_LlenarJTableDesdeDataBase();
obj1.setVisible(true);
    }
}
 
 
2.
package dba;
import java.sql.Connection;
import java.sql.DriverManager;
import javax.swing.JOptionPane;

public class Mysql {
private static String db="unalm";
private static String user="root";
private static String pass="aquitupassword";
private static String url="jdbc:mysql://localhost:3306/"+db;
private static Connection Conn;

public static Connection getConnection(){
    try{
        Class.forName("com.mysql.jdbc.Driver");
        Conn=DriverManager.getConnection(url, user, pass);

}catch(Exception e){
    JOptionPane.showMessageDialog(null,"Error"+e.getMessage());
}
    return Conn;
}


}
package form;

import javax.swing.table.DefaultTableModel;
import dba.Mysql;
import java.sql.*;
import javax.swing.JOptionPane;

public class Cliente extends javax.swing.JFrame {
DefaultTableModel model;
Connection Conn;
Statement sent;

public Cliente() {
        initComponents();
        Conn=Mysql.getConnection();
        Deshabilitar();
        Llenar();
    }
void Deshabilitar(){
    txtNombre.setEditable(false);

    txtDireccion.setEditable(false);
    txtCorreo.setEditable(false);
    txtTelefono.setEditable(false);
}
void Limpiar(){
    txtNombre.setText("");
    txtDireccion.setText("");
    txtCorreo.setText("");
    txtTelefono.setText("");
}
void Habilitar(){
    txtNombre.setEditable(true);
    txtCorreo.setEditable(true);
    txtDireccion.setEditable(true);
    txtTelefono.setEditable(true);
    txtNombre.requestFocus();
}
void Llenar(){
    try{
        Conn=Mysql.getConnection();
        String [] titulos ={"Id","Nombre","Direccion", "Telefono", "Correo"};
        String sql="select * from contactos";
        model=new DefaultTableModel(null, titulos);
        sent=Conn.createStatement();
        ResultSet rs=sent.executeQuery(sql);

        String fila []= new String [5];

        while(rs.next()){
            fila [0]=rs.getString("id");
            fila [1]=rs.getString("nombre");
            fila [2]=rs.getString("direccion");
            fila [3]=rs.getString("telefono");
            fila [4]=rs.getString("correo");

            model.addRow(fila);

        }
jTable1.setModel(model);
       
    }catch(Exception e){
e.printStackTrace();
    }
}

private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) {                                           
try{
    int fila=jTable1.getSelectedRow();
    String sql="delete from contactos where id="+jTable1.getValueAt(fila,0);
    sent=Conn.createStatement();
    int n=sent.executeUpdate(sql);
    if(n>0){
        Llenar();
        JOptionPane.showMessageDialog(null, "datos eliminados");
        Limpiar();
    }
}catch(Exception e){
    JOptionPane.showMessageDialog(null, "error"+e.getMessage());
}
  }

  private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) {                                          
try{
    String sql="insert into contactos ( direccion ,nombre, telefono, correo)" +
           "Values (?,?,?,?) ";
PreparedStatement ps=Conn.prepareCall(sql);
ps.setString(1, txtNombre.getText());
ps.setString(2, txtDireccion.getText());
ps.setString(3, txtTelefono.getText());
ps.setString(4, txtCorreo.getText());


int n=ps.executeUpdate();
if(n>0)
JOptionPane.showMessageDialog(null, "datos guardados");
}catch(Exception e){
    JOptionPane.showMessageDialog(null, "error"+ e.getMessage());
}
Llenar();
Limpiar();
    }                                          

    private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) {                                        
Limpiar();
Habilitar();
        // TODO add your handling code here:
    }
  private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {                                    
 if(evt.getButton()==1){
   try{
       Habilitar();
        int fila=jTable1.getSelectedRow();
        String sql="select * from contactos where id="+jTable1.getValueAt(fila,0);
        sent=Conn.createStatement();
        ResultSet rs=sent.executeQuery(sql);
        rs.next();
        txtNombre.setText(rs.getString("nombre"));
        txtDireccion.setText(rs.getString("direccion"));
        txtTelefono.setText(rs.getString("telefono"));
        txtCorreo.setText(rs.getString("correo"));

}catch(Exception e){
    e.printStackTrace();
}
    }
    }        

private void btnModificarActionPerformed(java.awt.event.ActionEvent evt) {                                            
try{
    String sql="Update contactos set nombre=?, direccion=?, telefono=?, correo=?"+
            "where id=?";
    int fila=jTable1.getSelectedRow();
    String dao=(String)jTable1.getValueAt(fila,0);
    PreparedStatement ps=Conn.prepareCall(sql);
    ps.setString(1,txtNombre.getText());
    ps.setString(2,txtDireccion.getText());
    ps.setString(3,txtTelefono.getText());
    ps.setString(4,txtCorreo.getText());//valor de campos de texto a pasar a
    //BasedeDatos

   ps.setString(5,dao);//la llamada sql se muestra en la tabla

    int n=ps.executeUpdate();
    if(n>0){
        Limpiar();
        Llenar();
        JOptionPane.showMessageDialog(null, "datos modificados");
       
    }
}catch (Exception e){
    JOptionPane.showMessageDialog(null, "error"+ e.getMessage());
}
        // TODO add your handling code here:
    }             

private void btnCerrarActionPerformed(java.awt.event.ActionEvent evt) {                                         
System.exit(0);
        // TODO add your handling code here:
    }

public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Cliente().setVisible(true);
            }
        });
    }
   private javax.swing.JButton btnCerrar;
    private javax.swing.JButton btnEliminar;
    private javax.swing.JButton btnGuardar;
    private javax.swing.JButton btnModificar;
    private javax.swing.JButton btnNuevo;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
    private javax.swing.JTextField txtCorreo;
    private javax.swing.JTextField txtDireccion;
    private javax.swing.JTextField txtNombre;
    private javax.swing.JTextField txtTelefono;
    // End of variables declaration                  

}



  2.    RESUMEN

 El control Jtable es una clase que me permite organizar una determinada información en tabla, esta difiere de una base de datos normal porque al utilizar Jtable tu puedes visualizar esta tabla, brindándole al  usuario organización de información, oportunidades de editar y cambiar el tamaño de las columna entre otras.
Los modelos de tabla son objetos que implementan la interface TableModel; a través de ellos es posible personalizar mucho más y mejor el comportamiento de los componente Jtable, permitiendo utilizar al máximo sus potencialidades.

  3.    SUMMARY

Jtable is a class that allows me to organize a certain information in a table, this differs from a normal database because when using Jtable you can visualize this table, giving the user information organization, opportunities to edit and resize the columns among other.
Table models are objects that implement the TableModel interface; through
They are possible to personalize much more and better the behavior of the components Jtable, allowing you to make the most of your potential.

  4. RECOMENDACIONES

Es necesario conocer que la implementación del código debe estar bien estructurado para evitar algunas redundancias innecesarias.
Conocer las especificaciones que nos presenta cuando estructuramos las tablas de cada base de datos, realizando nuestro trabajo más práctico y sencillo.


  5.    CONCLUSIONES
JTable es un componente swing java que nos permite mostrar datos en una tabla de una base de datos, sin embargo, a diferencia de otros componentes similares de otros lenguajes de programación (Delphi por ejemplo), java no nos permite gestionar directamente los datos. Es eso lo que haremos hoy, construir un JTable editable, más propiamente, este JTable nos permitirá actualizar datos de una JTable directamente con la base de datos

  5.    APRECIACIÓN DEL EQUIPO

Jtable le da al programador muchas facilidades, pues este posee varias características que permiten hacer desde tablas con información compleja y muy estructurada hasta tablas con información sencilla y "básica".
Jtable te brinda muchas facilidades para poder crear una table, y así mismo de llenarla con la información que desees ( números, letras etc...) por lo que sencillamente dentro de una tabla esta automáticamente a través de la información debidamente separada - por ""(comillas) o por , (coma) - es capaz de contabilizarlas y al mismo tiempo llenarla con la información que se le dio; es decir el programador solo se debe encargar de poner los títulos de las tablas y así mismo de escribir la información en el mismo orden en que desee que salga de acuerdo con los títulos y Jtable se encargara automáticamente de colocar la información donde se le indico.

  7.    GLOSARIO DE TÉRMINOS

Interfaz: Se utiliza para nombrar a la conexión funcional entre dos sistemas, dispositivos o componentes de cualquier tipo, que proporciona una comunicación de distintos niveles permitiendo el intercambio de información. Su plural es interfaces
METODO: un método es una subrutina cuyo código es definido en una clase y puede pertenecer tanto a una clase, como es el caso de los métodos de clase o estáticos, como a un objeto, como es el caso de los métodos de instancia. Análogamente a los procedimientos en lenguajes imperativos, un método consiste generalmente de una serie de sentencias para llevar a cabo una acción
OBJETO es una unidad dentro de un programa de computadora que consta de un estado y de un comportamiento, que a su vez constan respectivamente de datos almacenados y de tareas realizables durante el tiempo de ejecución
ATRIBUTO: es una especificación que define una propiedad de un objeto, elemento o archivo. También puede referirse o establecer el valor específico para una instancia determinada de los mismos.


  8. LINKOGRAFIA


 Aqui les dejo el link de las diapositivas