PreparedStatement

1. CONTENIDO
1.1. DEFINICIONES:
El PreparedStatement nos permite definir una sentencia SQL base, que nos sirve para modificar/insertar/buscar uno o varios registros con sólo cambiar los valores de los parámetros que especifiquemos.

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.

El proceso de sentencias SQL con un objeto PreparedStatement se realiza mediante los métodos executeQuery, executeUpdate y execute, al igual que el proceso de objetos Statement. A diferencia de las versiones de Statement, no se pasan parámetros en estos métodos debido a que la sentencia SQL ya se ha suministrado al crear el objeto. Dado que PreparedStatement amplía Statement, las aplicaciones pueden intentar llamar a versiones de los métodos executeQuery, executeUpdate y execute que toman una sentencia SQL. Esta operación provoca el lanzamiento de una excepción SQLException.

1.2. MÉTODO EXECUTEUPDATE
1.2.1. El método Statement.executeUpdate 
es efectivo si actualiza tablas DB2 con valores constantes. Sin embargo, a menudo las actualizaciones comportan el paso a tablas DB2 de valores contenidos en variables. Para hacer esto, utilice

1.2.2. El métodoPreparedStatement.executeUpdate.
Con el Controlador JDBC universal de DB2, puede también utilizar PreparedStatement.executeUpdate para invocar procedimientos almacenados que tienen parámetros de entrada y ningún parámetro de salida, y que no devuelven ningún conjunto de resultados.

Cuando ejecuta una sentencia de SQL muchas veces, puede obtener un mejor rendimiento creando la sentencia de SQL en forma de objeto PreparedStatement.

Ejecuta la instrucción SQL en este SQLServer PreparedStatement objeto, que debe ser una instrucción INSERT, la instrucción UPDATE, MERGE o DELETE; o una instrucción SQL que no devuelva nada, como una instrucción DDL.
Valor devuelto
Un int que indica el número de filas afectadas o 0 si se utiliza una instrucción DDL.
Excepciones
SQLServerException
Comentarios
Este método executeUpdate es especificado por el método executeUpdate en la interfaz java.sql.PreparedStatement.
1.3. USO DE CALLABLESTATEMENT
Así como un objeto de conexión crea la Declaración y objetos PreparedStatement, sino que también crea el objeto CallableStatement, que se utiliza para ejecutar una llamada a un procedimiento de base de datos almacenada.

Creación de objetos CallableStatement

Supongamos, es necesario ejecutar el siguiente procedimiento almacenado de Oracle 
       
CREATE OR REPLACE PROCEDURE getEmpName 
   (EMP_ID IN NUMBER, EMP_FIRST OUT VARCHAR) AS
BEGIN
   SELECT first INTO EMP_FIRST
   FROM Employees
   WHERE ID = EMP_ID;
END;
       

NOTA: Por encima de procedimiento almacenado se ha escrito para Oracle, pero estamos trabajando con la base de datos MySQL es así, escribamos mismo procedimiento almacenado para MySQL de la siguiente manera para crear la base de datos en EMP -

       
DELIMITER $$

DROP PROCEDURE IF EXISTS `EMP`.`getEmpName` $$
CREATE PROCEDURE `EMP`.`getEmpName` 
   (IN EMP_ID INT, OUT EMP_FIRST VARCHAR(255))
BEGIN
   SELECT first INTO EMP_FIRST
   FROM Employees
   WHERE ID = EMP_ID;
END $$

DELIMITER ;
       
Existen tres tipos de parámetros: IN, OUT e INOUT. El objeto PreparedStatement sólo se utiliza el parámetro IN. El objeto CallableStatement puede utilizar todos los tres.
Aquí están las definiciones de cada uno.
El siguiente fragmento de código muestra cómo emplear el métodoConnection.prepareCall () para crear una instancia de un objeto CallableStatementbasado en el procedimiento almacenado anterior
       
CallableStatement cstmt = null;
try {
   String SQL = "{call getEmpName (?, ?)}";
   cstmt = conn.prepareCall (SQL);
   . . .
}
catch (SQLException e) {
   . . .
}
finally {
   . . .
}
       

La cadena SQL variable representa el procedimiento almacenado, con posiciones de parámetros. El uso de los objetos CallableStatement es muy similar a usar los objetos PreparedStatement. Debe vincular los valores de todos los parámetros antes de ejecutar la instrucción, o recibirá una excepción de SQL. Si usted tiene parámetros IN, sólo tienes que seguir las mismas reglas y técnicas que se aplican a un objeto PreparedStatement; utilizar el método setXXX () que se corresponde con el tipo de datos de Java va a enlazar. Cuando se utiliza parámetros OUT e INOUT debe emplear un método CallableStatement adicional, registerOutParameter (). El método registerOutParameter () asocia el tipo de datos JDBC, al tipo de datos que se espera que el procedimiento almacenado para volver. Una vez que se llama a su procedimiento almacenado, se recupera el valor del parámetro OUT con el método apropiado getXXX (). Este método arroja el valor recuperado de tipo SQL para un tipo de datos Java.

Cerrando objeto CallableStatement

Del mismo modo que se cierra otro objeto Statement, por la misma razón también se debe cerrar el objeto CallableStatement.
Una simple llamada al método close () hará el trabajo. Si cierra el objeto de conexión en primer lugar, se va a cerrar el objeto CallableStatement también. Sin embargo, siempre debe cerrar explícitamente el objeto CallableStatement para asegurar la limpieza adecuada.
       
CallableStatement cstmt = null;
try {
   String SQL = "{call getEmpName (?, ?)}";
   cstmt = conn.prepareCall (SQL);
   . . .
}
catch (SQLException e) {
   . . .
}
finally {
   cstmt.close();
}
       
1.4. Ejemplos
1.4.1. Ejemplo 01
       
package com.autentia.tutos;  
  
import java.sql.Connection;  
import java.sql.DriverManager;  
  
public class ConnectionMySQL{  
      
    public static Connection con_mysql;  
       
    public static Connection conectar(String host, String user, String password, String db) throws Exception  {  
            String databaseURL = "jdbc:mysql://" + host + "/" + db;  
            Class.forName("com.mysql.jdbc.Driver");  
            con_mysql = DriverManager.getConnection(databaseURL, user, password);  
        return con_mysql;  
    }  
  

}

       
1.4.2. Ejemplo 02
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package com.autentia.tutos;  
  
import java.sql.CallableStatement;  
import java.sql.Connection;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
import java.sql.Types;  
  
public class SampleStoredProcedures {  
  
    public static void main(String[] args) throws SQLException{  
  
        Connection conn = null;  
        try {  
            // Creamos la conexion  
            conn=ConnectionMySQL.conectar("localhost", "user", "password", "****");  
            conn.setAutoCommit(false);  
              
             CallableStatement cStmt = conn.prepareCall("{call demoSp(?, ?)}");    
             cStmt.setString(1, "abcdefg");    
             cStmt.setInt(2, 0);  
             cStmt.registerOutParameter("inOutParam", Types.INTEGER);    
              
             cStmt.execute();    
             final ResultSet rs = cStmt.getResultSet();  
              
             while (rs.next()) {  
                 System.out.println("Cadena de caracteres pasada como parametro de entrada="+rs.getString("inputParam"));  
             }    
              
             int outputValue = cStmt.getInt("inOutParam");  
             System.out.println("Parametro de salida incrementado="+outputValue);  
          
              
          
        }catch (Exception e) {  
            conn.rollback();  
            e.printStackTrace();  
        }finally{  
            conn.close();  
        }  
    }  
}

1.3.3. Ejemplo 03
       
   // Process all returned result sets  
      cStmt.execute();    
      final ResultSet rs = cStmt.getResultSet();  
           
      while (rs.next()) {  
          // process result set  
            ...  
      }    
           
    //  
    // Retrieve output parameters  
    //  
    // Connector/J supports both index-based and  
    // name-based retrieval  
    //  
  
    int outputValue = cStmt.getInt(1); // index-based  
  

    outputValue = cStmt.getInt("inOutParam"); // name-based  


       

2. RESUMEN
El PreparedStatement nos permite definir una sentencia SQL base, que nos sirve para modificar/insertar/buscar uno o varios registros con sólo cambiar los valores de los parámetros que especifiquemos.
Esta interfaz permite construir las sentencias sql requeriadas una ve y ejecutarlas cualquier número de veces en la aplicación.
En el tiempo de construcción el PreparedStatement no conoce los valores que determinen el resultado de su ejecución.
El PreparedStatement nos permite definir una sentencia SQL base, que nos sirve para modificar/insertar/buscar uno o varios registros con sólo cambiar los valores de los parámetros que especifiquemos
Cuando trabajamos con una base de datos es posible que haya sentencias
SQL que tengamos que ejecutar varias veces durante la sesión, aunque sea con distintos parámetros. Por ejemplo, durante una sesión con base de datos podemos querer insertar varios registros en una tabla. Cada vez los datos que insertamos serán distintos, pero la sentencia

SQL será la misma: Un INSERT sobre determinada tabla que será simpre igual, salvo los valores concretos que queramos insertar.Casi todas las bases de datos tienen previsto un mecanismo para que en estos casos la ejecución de esas sentencias repetidas sea más rápida. tenemos una tabla person con un id, una edad, un nombre, un apellido y hacemos, por ejemplo, varios INSERT.
3. SUMMARY
The PreparedStatement allows us to define a base SQL statement, which helps us to modify / insert / search one or more registers simply by changing the values ​​of the parameters that we specify.
This interface allows you to build the required sql statements once and execute them any number of times in the application.
At the time of construction, the PreparedStatement does not know the values ​​that determine the result of its execution.
The PreparedStatement allows us to define a base SQL statement, which allows us to modify / insert / search one or several registers simply by changing the values ​​of the parameters that we specify
When we work with a database it is possible that there are sentences
SQL that we have to execute several times during the session, even with different parameters. For example, during a session with a database, we may want to insert several records in a table. Each time the data we insert will be different, but the sentence

SQL will be the same: An INSERT on a certain table that will always be the same, except for the specific values ​​that we want to insert. Almost all the databases have a mechanism in place so that in these cases the execution of these repeated sentences is faster. we have a person table with an id, an age, a name, a surname and we make, for example, several INSERT.
4. RECOMENDACIÓN
a) A la hora de codificar podemos usar los prepareStatement independientes de que la base de datos y/o el conector los soporten.
b) Recomendamos primero debemos darle valor a los parámetros que dejamos como interrogantes antes de crear un PreparedStatement.
c) Al crear la PreparedSstatement, ya indicamos cómo es la SQL y qué campos tiene.
5. CONCLUSIONES
a) Concluimos que PreparedStatement es una sentencia SQL precompilada para ser ejecutada muchas veces.
b) 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.
c) Hay algunos manejadores que inclusive crean un procedimiento almacenado temporal, cada vez que se crea un PreparedStatement.
d) PreparedStatement nos permite ejecutar procedimientos almacenados y a mejorar las forma de las consultas
6. APRECIACIÓN DEL EQUIPO
Hoy nos ha tocado hablar sobre un tema de mucha relevancia para los desarrolladores de software (PreparedStatement) y digo de mucha relevancia porque nos permite definir una sentencia SQL base, que nos sirve para modificar/insertar/buscar uno o varios registros.
Conforme el avance de nuestro proyecto entendiendo el funcionamiento correcto de este objeto o sentencia SQL precompilada, tratamos puntos indispensables en este tema tales como Método executeUpdate(),Uso de CallableStatement, Definición y múltiples protopipos.
Para nosotros fue muy importante aprender sobre este objeto, porque no solo aprendimos el funcionamiento algunos métodos o propiedades sino también entendimos en que se diferencia el objeto PreparedStatement o el objeto Statement si ambos cumplen objetivos comunes (definir sentencias SQL), tambien podemos afirmar que tanto el objeto PreparedStatement como el Statement se realiza mediante los métodos executeQuery, executeUpdate y execute con la diferencia en que las versiones de Statement, no se pasan parámetros en estos métodos debido a que la sentencia SQL ya se ha suministrado al crear el objeto.
7. GLOSARIO DE TÉRMINOS
SUBCLASE: Los métodos y variables que posee un objeto definen la clase a la cual pertenece
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.
COMPILACIÓN: Significa traducir un código de programación a código ejecutable por la máquina. Para compilar un código fuente y convertirlo en ejecutable hay distintas formas dependiendo del compilador que se utilice.
MÉTODO EXECUTEUPDATE
Permite lanzar consultas SQL de actualización (INSERT, UPDATE O DELETE).

ATRIBUTO: Los atributos se guardan en variables denominadas de instancia, y cada objeto particular puede tener valores distintos para estas variables. Las variables de instancia también denominados miembros dato, son declaradas en la clase, pero sus valores son fijados y cambiados en el objeto.
TRANSACCIONES: Es un conjunto de órdenes que se ejecutan formando una unidad de trabajo, es decir, en forma indivisible o atómica.

INSTRUCCIÓN: Están definidos y determinados dentro de cada plataforma en el conjunto de instrucciones; es un conjunto de datos insertados en una secuencia estructurada o específica que el procesador interpreta y ejecuta.

DDL: Un Data Definition Language o Lenguaje de descripción de datos (DDL) es un lenguaje de programación para definir estructuras de datos.

IN y OUT: Esta funcionalidad permite definir el tipo de pasaje de parámetros, pudiendo elegir entre uno de los siguientes valores: entrada (in), salida (out) o entrada/salida (inout). El valor por defecto será inout.

FRAME :Los frame son utilizados para agrupar varios elementos a un solo elemento, ya que de que de esta forma es más fácil la agrupación de datos y el manejo de los mismo, de esa forma nosotros podemos, modificar el color de fondo o la propiedad de los márgenes.
8. LINKOGRAFÍA
https://www.ibm.com/support/knowledgecenter/es/SSEPGG_8.2.0/com.ibm.db2.udb.doc/ad/tjvpsxqu.htm

https://es.scribd.com/document/349696807/Uso-de-PreparedStatement-Con-Java-y-MySQL

http://files.uladech.edu.pe/docente/18010218/PROGRAMACION_VISUAL_I/SESION_06/Tema_6_Objeto_JTable.pdf

https://www.lawebdelprogramador.com/codigo/tag.php?tag=Java%20JTable%20PDF

https://www.google.com.pe/url?sa=t&rct=j&q=&esrc=s&source=web&cd=8&cad=rja&uact=8&ved=0ahUKEwjf29yo-LLXAhXKOCYKHQIkDtMQFghaMAc&url=http%3A%2F%2Fpeople.cs.uchicago.edu%2F~asiegel%2Fcourses%2Fcspp51037_winter06%2Flesson5%2FLessonJDBC%2BGraphics.ppt&usg=AOvVaw193AFCjmzT_9tA1qtXKTpB

https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html

https://www.ibm.com/support/knowledgecenter/es/SSEPGG_8.2.0/com.ibm.db2.udb.doc/ad/tjvpsxqu.htm

Comentarios

Entradas populares de este blog

RESULTSET

CONTROL JTABLE CON BASE DE DATOS

Reportes