Prepared Statement Java
Prepared Statement Java
Las utilizaremos en lugar de una Statement cuando haya que ejecutar varias veces
una misma sentencia SQL con distintos parámetros.
Por ejemplo:
PreparedStatement ps = conexion.prepareStatement("INSERT INTO
contactos values (null,?,?,?)");
Una PreparedStatement es una sentencia SQL que contiene ? en los lugares donde
posteriormente se asignarán los valores. De este modo estamos indicando al SGBD
cuál es el código y cuáles son las variables que el usuario debe ingresar.
import java.sql.*;
public class EjemploAccesoBD8 {
public static void main(String[] args) {
Connection conexion = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conexion =
DriverManager.getConnection("jdbc:mysql://localhost/prueba?
useServerPrepStmts=true", "root", "1daw");
PreparedStatement ps = conexion.prepareStatement("INSERT INTO
contactos values (null,?,?,?)");
//Asigno al primer ? el String "Leopoldo".
//Corresponde al campo nombre de tipo VARCHAR
ps.setString(1, "Leopoldo");
// Asigno al segundo ? el String "Pelayo".
//Corresponde al campo apellidos de tipo VARCHAR
ps.setString(2, "Pelayo");
// Asigno al tercer ? el String "987876509".
//Corresponde al campo telefono de tipo VARCHAR
ps.setString(3, "999878765");
// Se ejecuta la operación.
ps.executeUpdate();
} catch (SQLException e) {
System.out.println(e.toString());
} catch (ClassNotFoundException e) {
System.out.println(e.toString());
} finally {
try {
if (conexion != null) {
conexion.close();
}
} catch (SQLException ex) {
System.out.println(ex.toString());
}
}
}
}
La clase PreparedStatement:
1. CONTENIDO:
DEFICICION:
La interfase PreparedStatement hereda de Statement y se diferencia de esta de dos
maneras.
• Las instancias de PreparedStatement contienen una sentencia SQL que ya ha sido
compilada. Esto es lo que hace que se le llame ‘prepared’ (preparada).
• La sentencia SQL contenida en un objeto PreparedStatement pueden tener uno o
más parámetros IN (entrada). Un parámetro de entrada 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 de entrada. Antes de
ejecutarse la sentencia se debe suministrar un valor para cada interrogante mediante
los métodos apropiados setXXX, que son añadidos por el interfaz PreparedStatement.
Debido a que los objetos PreparedStatement están precompilados, su ejecución será
más rápida que de los objetos Statement. Por lo tanto, a una sentencia SQL que se le
va a ejecutar constantemente, se le suele crear como PreparedStatement para
incrementar su eficacia.
Siendo una subclase de la interfaz Statement, el interfaz PreparedStatement hereda
toda la funcionalidad del interfaz 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 de entrada. 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.
METODO ExecuteUpdate()
Ejecuta la instrucción SQL determinada, que puede ser una instrucción INSERT,
UPDATE o DELETE; o una instrucción SQL que no devuelve nada, como una
instrucción DDL de SQL.
Sintaxis:
public int executeUpdate(java.lang.String sql)
Parámetros:
sql
Valor devuelto
Un valor int que indica el número de filas afectadas o 0 si se usa una instrucción DDL.
USO DE CallableStatement:
{call nombre_del_procedimiento[(?,?,...)]}
{?=call nombre_del_procedimiento[(?.?...)]}
{call nombre_del_procedimiento}
EJEMPLOS:
Este es un ejemplo de utilización del método executeQuery de un objeto
PreparedStatement para obtener un ResultSet.
import java.sql.*;
import java.util.Properties;
// Se ejecuta una sentencia SQL que crea una tabla en la base de datos.
s.executeUpdate("CREATE TABLE MYLIBRARY.MYTABLE (NAME
VARCHAR(20), ID INTEGER)");
// A continuación, este programa utiliza una sentencia preparada para
// insertar muchas filas en la base de datos.
PreparedStatement ps = null;
String[] nameArray = {"Rich", "Fred", "Mark", "Scott", "Jason",
"John", "Jessica", "Blair", "Erica", "Barb"};
try {
// Crear un objeto PreparedStatement utilizado para insertar datos en la
// tabla.
ps = c.prepareStatement("INSERT INTO MYLIBRARY.MYTABLE (NAME, ID)
VALUES (?, ?)");
try {
if (c != null) {
c.close();
}
} catch (SQLException e) {
System.out.println("El borrado no ha podido cerrar Connection.");
}
}
}
}
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:
String consulta = "SELECT usuario FROM registro WHERE email like ?";
pstmt.setString(1 , campoTexto.getText());
String user = . . . ;
String email = . . . ;
pstmt.setString(1 , user);
pstmt.setString(2 , email);
ps.executeUpdate();
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);
import java.util.Properties;
2. RESUMEN:
El interfaz PreparedStatement hereda del interfaz Statement y se diferencia de eelo de
dos maneras:
Las instancias de PreparedStatement contienen una sentencia SQL que ya ha sido
compilada. Esto es lo que hace que se le llame ‘prepared’ (preparada).
La sentencia SQL contenida en un objeto PreparedStatement pueden tener uno o más
parámetros IN (entrada).
Esta interfaz nos permite ejecutar sentencias SQL sobre una conexión establecida con
una base de datos. pero en ella se ejecutan sentencias SQL más especializadas,
estas sentencias SQL se van a denominar sentencias SQL precompiladas y van a
recibir parámetros de entrada lo cual hace más rápido su ejecución que de los objetos
Statement .
3. SUMMary:
The PreparedStatement interface inherits from the Statement interface and differs from
it in two ways:
• The PreparedStatement instances contain an SQL statement that has already been
compiled. This is what causes it to be called 'prepared'.
• The SQL statement contained in a PreparedStatement object can have one or more
IN parameters.
4. RECOMENDACIONES:
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.
Para poder ejecutar un objeto PreparedStatement, primero hay que establecer un valor
en cada uno de los marcadores de parámetro. El objeto PreparedStatement
proporciona varios métodos para establecer parámetros. Todos ellos tienen el formato
set<Tipo>, siendo <Tipo> un tipo de datos Java. Ejemplos de estos métodos son
setInt, setLong, setString, setTimestamp y setBlob.
Se utiliza el método prepareStatement() de Connection para crear nuevos objetos
PreparedStatement. A diferencia de lo que sucedía con los objetos Statement, la
sentencia SQL se suministra en el momento de crear el objeto PreparedStatement. En
ese momento, se precompila la sentencia SQL.
5. Conclusiones
Permite realizar operaciones (consultas, actualizaciones, ...) sobre bases de datos
relacionales utilizando SQL (Structured Query Language).
La ejecucion de sentencias en la base de datos a traves de JDBC se realiza mediante
las interfaces Statement o PreparedStatement.
Para obtener un objeto del tipo Statement se llama al metodo createStatement() del
objeto Connection.
La interfaz PreparedStatement extiende a la interfaz Statement y utiliza una plantilla
para crear la sentencia SQL. Se utiliza en aquellas situaciones en las que se necesita
ejecutar varias veces una consulta en la que pueden cambiar ´unicamente los par
´ametros. De esta forma (si el SGBD lo permite) se optimiza la consulta una sola vez.
A la hora de obtener tanto un Statement como un PreparedStatement es posible
especificar (si la base de datos lo acepta) el tipo de desplazamiento deseado y si se
desea que las modificaciones en el resultado se reflejen en la base de datos.
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.
8. BIBLIOGRAFÍA
http://seduca.uaemex.mx/material/LIA/POO/materiales/PreparedStatement.html
http://www.forosdelweb.com/f45/diferencias-entre-preparestatement-statement- 612469/
http://www.vc.ehu.es/jiwotvim/ISOFT2009-2010/Teoria/BloqueIV/JDBC.pdf
http://www.euskalnet.net/jaoprogramador/j2ee/JDBC/jdbc25.htm
https://www.ibm.com/support/knowledgecenter/es/ssw_i5_54/rzaha/prepex.htm
Declaración de JDBC
Crear declaración
Ejecución de una consulta mediante una declaración
Ejecutar una actualización a través de una declaración
Cerrar una declaración
o Cerrar una declaración usando Java Pruebe con recursos
Declaración frente a declaración preparada
Jakob Jenkov
Última actualización: 2019-02-27
Crear declaración
Para utilizar un JDBC de Java Statement, primero debe crear un
archivo Statement. A continuación, se muestra un ejemplo de
cómo crear una Statementinstancia de Java :
El rowsAffecteddevuelto por
la statement.executeUpdate(sql)llamada indica cuántos
registros de la base de datos se vieron afectados por la instrucción
SQL.
declaración.close ();
Siguiente: JDBC ResultSet