Integrantes:
Alexandra Villanueva Abanto
Crithel Delgado Bustamante
I. Tema: PreparedStatement
1. Contenido
Definición
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() |
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 ConnectionPreparedStatement 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();
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:
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();
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();
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, como ya se ha mencionado hereda toda la funcionalidad de Statement. Además, se añade un conjunto completo de métodos necesarios para fijar los valores que van a ser enviados a la base de datos en el lugar de las ‘anclas’ 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, a pesar de estar disponibles para ellos.
El método executeUpdate() es el que realmente ejecuta la consulta en la base de datos, mientras que el método close() permite liberar los recursos asignados a la conexión abierta.El ejemplo a continuación inserta tuplas a una tabla llamadas
|
Uso de CallableStatement
Al igual que en createStatement y prepareStatement, existen varias versiones de prepareCall que proporcionan soporte para especificar características de ResultSet. A diferencia de prepareStatement, el método prepareCall no proporciona variantes para trabajar con claves generadas automáticamente a partir de CallableStatements (JDBC 3.0 no soporta este concepto). A continuación se ofrecen algunos ejemplos de llamadas válidas al método prepareCall:
Ejemplo: método prepareCall
// El siguiente código es nuevo en JDBC 2.0
CallableStatement cs2 = conn.prepareCall("? = CALL ADDEMPLOYEE(?, ?, ?)",
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATEABLE);
// Nuevo en JDBC 3.0
CallableStatement cs3 = conn.prepareCall("? = CALL ADDEMPLOYEE(?, ?, ?)",
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATEABLE,
ResultSet.HOLD_CURSOR_OVER_COMMIT);
2. Resumen
La sentencia SQL contenida en un objeto PreparedStatement pueden tener uno o más parámetros IN. Un objeto PreparedStatement es potencialmente más eficiente que un objeto Statement porque este ha sido precompilado y almacenado para su uso futuro. Se utiliza para enviar sentencias SQL pre compiladas con uno o más parámetros.
En el siguiente ejemplo se va a insertar un nuevo registro en una tabla
Siendo una subclase de Statement, PreparedStatement, como ya se ha mencionado hereda toda la funcionalidad de Statement. Además,se añade un conjunto completo de métodos necesarios para fijar los valores que van a ser enviados a la base de datos en el lugar de las ‘anclas’ para los parámetros IN. Los formatos de Statement de estos métodos no deberían usarse nunca con objetos PreparedStatement, a pesar de estar disponibles para ellos.
[...]
El método executeUpdate es el que realmente ejecuta la consulta en la base de datos, mientras que el método close permite liberar los recursos asignados a la conexión abierta. El ejemplo a continuación inserta tuplas a una tabla llamada interes perteneciente a la base de datos ligas.
3. Summary
The SQL statement contained in a PreparedStatement object can have one or more IN parameters. A PreparedStatement object is potentially more efficient than a Statement object because it has been precompiled and stored for future use. It is used to send pre-compiled SQL statements with one or more parameters. In the following example, a new record will be inserted in a table Being a subclass of Statement, PreparedStatement, as already mentioned, inherits all the functionality of Statement. In addition, a complete set of methods necessary to set the values to be sent to the database in place of the 'anchors' for the IN parameters is added. The Statement formats of these methods should never be used with PreparedStatement objects, despite being available to them. [...] The method executeUpdate is the one that actually executes the query in the database, while the close method allows to release the resources assigned to the open connection. The example below inserts tuples to a table called interest belonging to the database leagues.
- Para poder usar un PreparedStatement real desde java es necesario que tanto la base de datos como el driver java que usemos soporten el PreparedStatement.
- MySQL si soporta los PreparedStatement y los drivers modernos de MySQL para java tambien lo soportan. Sin embargo debemos habilitarlos en el momento de establecer na conexion.
- Por razones de rendimiento, intenta minimizar llamadas innecesarias a Connection.prepareCall() reusando instanciasde CallableStatement.
5. Conclusiones
- Connection.prepareCall() es un método costoso, debido a la petición de metadatos que hace el driver para suportar los parámetros de salida.
- Como hemos visto la interfaz CallableStatements nos permite ejecutar procedimientos almacenados e interactuar con el resultado de una manera rápida y sencilla posicionandose como una buena opción a la hora de trabajar con procedimientos almacenados. Espero que les sirva de utilidad.
- El método executeUpdate únicamente permite realizar sentencias de actualización de la BD: creación de tablas (CREATE), inserción (INSERT), actualización (UPDATE) y borrado de datos (DELETE).
6. Apreciación del Equipo
- Concluimos que utilizando este objeto en java el programador tiene que saber usar sentencias SQL que toman uno o más parámetros como argumentos de entrada (parámetros IN). Además que este objeto PreparedStatement es potencialmente más eficiente que un objeto Statement porque este ha sido precompilado y almacenado para su uso futuro.
- Desde nuestro punto de vista la clase PreparedStatement resulta muy indispensable, no solo esta clase sino también las demás que hemos estado viendo anteriormente, en otras palabras, este objeto es el componente que nos permitirá hacer uso de los procedimientos almacenados en donde nosotros los creamos a partir de nuestra base de datos, para luego poder ejecutarlos y así poderlos llamar desde un formulario creado en nuestro proyecto que estemos realizando.
7. Glosario de Términos
- 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.
- Sentencia precompilada: Significa que cuando se ejecuta el objeto PreparedStatement, el controlador de base de datos puede ejecutarla sin tener que compilarla primero.
- Parámetro: Es un tipo de variable que es recibida por una función, procedimiento subrutina.
- HERENCIA: La herencia es específica de la programación orientada a objetos, donde una clase nueva se crea a partir de una clase existente. La herencia (a la que habitualmente se denomina subclases) proviene del hecho de que la subclase (la nueva clase creada) contiene los atributos y métodos de la clase primaria.
- COMPILADO: Un lenguaje compilado es un lenguaje cuyas implementaciones son normalmente Compiladas y no intérpretes
- INTERPRÉTE: Es un programa informático capaz de analizar y ejecutar otros programas. Los intérpretes sólo realizan la traducció
- Parámetros: representa un dato que se ofrece una función con un fin específico. Por ejemplo, una rutina que tenga como finalidad devolver el número más alto de una lista, esperará que le pasemos dicho conjunto de valores como parámetro para realizar su tarea.
- Hereda: La herencia facilita la creación de objetos a partir de otros ya existentes e implica que una subclase obtiene todo el comportamiento (métodos) y eventualmente los atributos (variables) de su superclase.
- Extensión: es una cadena de caracteres anexada al nombre de un archivo, usualmente precedida por un punto. Su función principal es diferenciar el contenido del archivo de modo que el sistema operativo disponga el procedimiento necesario para ejecutarlo o interpretarlo, sin embargo, la extensión es solamente parte del nombre del archivo y no representa ningún tipo de obligación respecto a su contenid
- Servidor: es una aplicación en ejecución (software) capaz de atender las peticiones de un cliente y devolverle una respuesta en concordancia. Los servidores se pueden ejecutar en cualquier tipo de computadora.
- Interfaz: En informática se utiliza para nombrar a la conexión funcional entre dos sistemas o dispositivos de cualquier tipo dando una comunicación entre distintos niveles. Su plural es interfaces.