PreparedStatement
1. CONTENIDO
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.
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 -
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.
1.4.1. Ejemplo 01
1.3.3. Ejemplo 03
2. RESUMEN
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
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
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. Ejemplos1.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();
}
}
}
|
// 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.
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
Publicar un comentario