“AÑO DEL BUEN SERVICIO AL CUIDADANO”
TEMA:PREPAREDSTATEMENT
CURSO: LABORATORIO DE PROGRAMACIÓN II.
ESPECIALIDAD: INGENIERIA DE SISTEMAS Y TELEMATICA.
NOMBRE Y APELLIDO : MIRIAN GUISELA TARRILLO CHAVEZ
JORGE LUIS ARISTA CORONEL.
DOCENTE: MARCO AURELIO PORRO CHULL
CILCO: V – A AULA: 101
BAGUA GRANDE– PERÚ
2017
•Una PreparedStatement es una sentencia SQL de base de
datos recompilada. Al estar recompilado, 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. Por ejemplo, estas dos
inserciones MysSQL normales.
Definición
Uso desde java PreparedStatement
•Para poder usar una PreparedStatement real desde java, es necesario
que tanto la base de datos como el driver java que usemos soporten las
PreparedStatement .
• Independientemente de que lo soporten o no, nosotros podremos hacer
el código java usando PreparedStatement, aunque si la base de datos o el
driver no lo soportan, no obtendríamos la ventaja de la eficiencia.
¿Cuándo utilizar un objeto
PreparedStatemen?
• Si queremos ejecutar muchas veces un objeto Statement, reduciremos el tiempo de ejecución
si utilizamos un objeto PreparedStatement, en su lugar. La característica principal de un objeto
PreparedStatement es que, al contrario que un objeto Statement, se le entrega una sentencia
SQL cuando se crea. La ventaja de esto es que, en la mayoría de los casos, esta sentencia SQL se
enviará al controlador de la base de datos inmediatamente, donde será compilado.
• Como resultado, el objeto PreparedStatement no sólo contiene una sentencia SQL, sino una
sentencia SQL que ha sido precompilada. Esto significa que cuando se ejecuta la
PreparedStatement, el controlador de base de datos puede ejecutarla sin tener que compilarla
primero.
Crear un objeto PreparedStatement
• AL IGUAL QUE LOS OBJETOS STATEMENT, CREAMOS UN OBJETO PREPAREDSTATEMENT CON UN OBJETO
CONNECTION. UTILIZANDO NUESTRA CONEXIÓN CON ABIERTA EN EJEMPLOS ANTERIORES, PODRÍAMOS
ESCRIBIR LO SIGUIENTE PARA CREAR UN OBJETO PREPAREDSTATEMENT QUE TOME DOS PARÁMETROS DE
ENTRADA.
PREPAREDSTATEMENT UPDATESALES = CON.PREPARESTATEMENT(
"UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ?");
Cerrando Objeto PreparedStatement
Del mismo modo que se cierra un objeto Statement, por la misma razón también se debe cerrar el objeto
PreparedStatement.
PreparedStatement pstmt = null;
try {
String SQL = "Update Employees SET age = ? WHERE id = ?";
pstmt = conn.prepareStatement(SQL);
. . .}
catch (SQLException e) {
. . .}
finally {
pstmt.close();
}
Método
ExecuteUpdate
MÉTODO DESCRIPCIÓN
PUBLIC VOID SETINT (INT
PARAMINDEX, INT VALUE)
establece el valor entero para el índice de parámetro dado.
PUBLIC VOID SETSTRING (INT
PARAMINDEX, VALOR DE
CADENA)
establece el valor de cadena para el índice de parámetro dado.
PUBLIC VOID SETFLOAT (INT
PARAMINDEX, VALOR
FLOTANTE)
establece el valor flotante en el índice de parámetro dado.
PUBLIC VOID SETDOUBLE (INT
PARAMINDEX, DOUBLE VALUE)
establece el doble valor para el índice de parámetro dado.
PUBLIC INT EXECUTEUPDATE () ejecuta la consulta. Se usa para crear, soltar, insertar, actualizar,
eliminar, etc.
PÚBLICO RESULTSET
EXECUTEQUERY ()
ejecuta la consulta de selección. Devuelve una instancia de
ResultSet.
• 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;
Creación de objetos CallableStatement
Uso de
CallableStatement
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.
CallableStatement cstmt = null;
try {
String SQL = "{call getEmpName (?, ?)}";
cstmt = conn.prepareCall (SQL);
. . .}
catch (SQLException e) {
. . .}
finally {
cstmt.close();
}
Ejemplos
Ejemplos crear tabla emp (número de identificación (10),
nombre varchar2(50));
import java.sql. *;
clase InsertPrepared {
public static void main (String args []) {
prueba {
Class.forName ( "oracle.jdbc.driver.OracleDriver" );
Connection con = DriverManager.getConnection ( "jdbc: oracle: thin: @localhost: 1521:
xe" , "sistema" , "oráculo" );
PreparedStatement stmt = con.prepareStatement ( "insertar en valores Emp (?,?)" );
stmt.setInt ( 1 , 101 ); // 1 especifica el primer parámetro en 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);}
} }
Ejemplo de interfaz preparedstatement que
actualiza el registro
PREPAREDSTATEMENT STMT = CON.PREPARESTATEMENT ( "UPDATE EMP SET NAME =? WHERE ID =?" );
STMT.SETSTRING ( 1 , "SONOO" ); // 1 ESPECIFICA EL PRIMER PARÁMETRO EN LA CONSULTA, ES DECIR, NOMBRE
STMT.SETINT ( 2 , 101 );
INT I = STMT.EXECUTEUPDATE ();
SYSTEM.OUT.PRINTLN (I + "REGISTROS ACTUALIZADOS" );
Ejemplo de interfaz PreparedStatement que
recupera los registros de una tabla
PREPAREDSTATEMENT STMT = CON.PREPARESTATEMENT ( "SELECT * FROM EMP" );
RESULTSET RS = STMT.EXECUTEQUERY ();
WHILE (RS.NEXT ()) {
SYSTEM.OUT.PRINTLN (RS.GETINT ( 1 ) + "" + RS.GETSTRING ( 2 ));
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.

Prepared statement

  • 1.
    “AÑO DEL BUENSERVICIO AL CUIDADANO” TEMA:PREPAREDSTATEMENT CURSO: LABORATORIO DE PROGRAMACIÓN II. ESPECIALIDAD: INGENIERIA DE SISTEMAS Y TELEMATICA. NOMBRE Y APELLIDO : MIRIAN GUISELA TARRILLO CHAVEZ JORGE LUIS ARISTA CORONEL. DOCENTE: MARCO AURELIO PORRO CHULL CILCO: V – A AULA: 101 BAGUA GRANDE– PERÚ 2017
  • 3.
    •Una PreparedStatement esuna sentencia SQL de base de datos recompilada. Al estar recompilado, 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. Por ejemplo, estas dos inserciones MysSQL normales. Definición
  • 4.
    Uso desde javaPreparedStatement •Para poder usar una PreparedStatement real desde java, es necesario que tanto la base de datos como el driver java que usemos soporten las PreparedStatement . • Independientemente de que lo soporten o no, nosotros podremos hacer el código java usando PreparedStatement, aunque si la base de datos o el driver no lo soportan, no obtendríamos la ventaja de la eficiencia.
  • 5.
    ¿Cuándo utilizar unobjeto PreparedStatemen? • Si queremos ejecutar muchas veces un objeto Statement, reduciremos el tiempo de ejecución si utilizamos un objeto PreparedStatement, en su lugar. La característica principal de un objeto PreparedStatement es que, al contrario que un objeto Statement, se le entrega una sentencia SQL cuando se crea. La ventaja de esto es que, en la mayoría de los casos, esta sentencia SQL se enviará al controlador de la base de datos inmediatamente, donde será compilado. • Como resultado, el objeto PreparedStatement no sólo contiene una sentencia SQL, sino una sentencia SQL que ha sido precompilada. Esto significa que cuando se ejecuta la PreparedStatement, el controlador de base de datos puede ejecutarla sin tener que compilarla primero.
  • 6.
    Crear un objetoPreparedStatement • AL IGUAL QUE LOS OBJETOS STATEMENT, CREAMOS UN OBJETO PREPAREDSTATEMENT CON UN OBJETO CONNECTION. UTILIZANDO NUESTRA CONEXIÓN CON ABIERTA EN EJEMPLOS ANTERIORES, PODRÍAMOS ESCRIBIR LO SIGUIENTE PARA CREAR UN OBJETO PREPAREDSTATEMENT QUE TOME DOS PARÁMETROS DE ENTRADA. PREPAREDSTATEMENT UPDATESALES = CON.PREPARESTATEMENT( "UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ?");
  • 7.
    Cerrando Objeto PreparedStatement Delmismo modo que se cierra un objeto Statement, por la misma razón también se debe cerrar el objeto PreparedStatement. PreparedStatement pstmt = null; try { String SQL = "Update Employees SET age = ? WHERE id = ?"; pstmt = conn.prepareStatement(SQL); . . .} catch (SQLException e) { . . .} finally { pstmt.close(); }
  • 8.
  • 9.
    MÉTODO DESCRIPCIÓN PUBLIC VOIDSETINT (INT PARAMINDEX, INT VALUE) establece el valor entero para el índice de parámetro dado. PUBLIC VOID SETSTRING (INT PARAMINDEX, VALOR DE CADENA) establece el valor de cadena para el índice de parámetro dado. PUBLIC VOID SETFLOAT (INT PARAMINDEX, VALOR FLOTANTE) establece el valor flotante en el índice de parámetro dado. PUBLIC VOID SETDOUBLE (INT PARAMINDEX, DOUBLE VALUE) establece el doble valor para el índice de parámetro dado. PUBLIC INT EXECUTEUPDATE () ejecuta la consulta. Se usa para crear, soltar, insertar, actualizar, eliminar, etc. PÚBLICO RESULTSET EXECUTEQUERY () ejecuta la consulta de selección. Devuelve una instancia de ResultSet.
  • 10.
    • Supongamos, esnecesario 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; Creación de objetos CallableStatement Uso de CallableStatement
  • 11.
    CERRANDO OBJETO CALLABLESTATEMENT Delmismo modo que se cierra otro objeto Statement, por la misma razón también se debe cerrar el objeto CallableStatement. CallableStatement cstmt = null; try { String SQL = "{call getEmpName (?, ?)}"; cstmt = conn.prepareCall (SQL); . . .} catch (SQLException e) { . . .} finally { cstmt.close(); }
  • 12.
  • 13.
    Ejemplos crear tablaemp (número de identificación (10), nombre varchar2(50)); import java.sql. *; clase InsertPrepared { public static void main (String args []) { prueba { Class.forName ( "oracle.jdbc.driver.OracleDriver" ); Connection con = DriverManager.getConnection ( "jdbc: oracle: thin: @localhost: 1521: xe" , "sistema" , "oráculo" ); PreparedStatement stmt = con.prepareStatement ( "insertar en valores Emp (?,?)" ); stmt.setInt ( 1 , 101 ); // 1 especifica el primer parámetro en 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);} } }
  • 14.
    Ejemplo de interfazpreparedstatement que actualiza el registro PREPAREDSTATEMENT STMT = CON.PREPARESTATEMENT ( "UPDATE EMP SET NAME =? WHERE ID =?" ); STMT.SETSTRING ( 1 , "SONOO" ); // 1 ESPECIFICA EL PRIMER PARÁMETRO EN LA CONSULTA, ES DECIR, NOMBRE STMT.SETINT ( 2 , 101 ); INT I = STMT.EXECUTEUPDATE (); SYSTEM.OUT.PRINTLN (I + "REGISTROS ACTUALIZADOS" );
  • 15.
    Ejemplo de interfazPreparedStatement que recupera los registros de una tabla PREPAREDSTATEMENT STMT = CON.PREPARESTATEMENT ( "SELECT * FROM EMP" ); RESULTSET RS = STMT.EXECUTEQUERY (); WHILE (RS.NEXT ()) { SYSTEM.OUT.PRINTLN (RS.GETINT ( 1 ) + "" + RS.GETSTRING ( 2 ));
  • 16.
    CONCLUSIONES • LA DEFINICIÓNDE 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.