2. LA CLASE PREPAREDSTATEMENT
• Vista Preliminar
La interfase 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 ‘encaje’ para cada parámetro IN. Debe
suministrarse un valor para cada interrogante mediante el método apropiado
setXXX antes de ejecutar la sentencia.
3. Pasar parámetros IN
Antes de que un objeto PreparedStatement sea ejecutado debe
fijarse el valor de cada encaje ‘?’. Se hace esto mediante la llamada a
un método setXXX, donde XXX es el tipo apropiado para el
parámetro. Por ejemplo, si el parámetro tiene un tipo Java long, el
método a usar será setLong. El primero de los argumentos del
método setXXX es la posición ordinal del parámetro a fijar, y el
segundo argumento es el valor que queremos que adquiera el
parámetro.
4. Envío de JDBC NULL como un parámetro IN
El método setNull permite a los programadores enviar valores JDBC
NULL a la base de datos como un parámetro IN. Notese de cualquier
modo, que debe especificarse el tipo del parámetro. También se
enviará un JDBC NULL a la base de datos cuando un valor Java null se
pasa mediante un método setXXX (si los acepta los objetos Java como
argumentos). El método setObject, en cualquier caso, puede tomar
un valor null únicamente si se ha especificado el tipo JDBC.
5. 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();
6. Ejemplo de PreparedStatement de modificación
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();
8. Usando CallableStatements
Introducción
JDBC (Java Database Connectivity) es un API que nos proporciona una serie
de interfaces para poder acceder a cualquier base de datos que la
implemente. El API nos abstrae de los detalles específicos de cada base de
datos permitiendonos conectar practicamente de igual manera
independientemente de la bases de datos.
De entre todas las interfaces que nos proporciona el API nos centraremos en
la interfaz CallableStatements que nos permitirá ejecutar procedimientos
almacenados. Esto puede venir bien sobre todo cuando estamos trabajando
en proyectos en los que por distintos motivos gran parte del modelo de
negocio se encuentra en base de datos y se quiere por ejemplo explotar ese
negocio desde una nueva aplicación desarrollada en otra tecnología, Java
concretamente.
9. Entorno
El tutorial está escrito usando el siguiente entorno:
Hardware : Portátil Mac Book Pro 15″ (2,6 Ghz Intel Core i7, 4 GB DDR3).
Sistema Operativo:Mac OS X Snow Leopard 10.6.7
Eclipse Helios
MySQL 5.1.35
Java 1.6
10. Interfaz CallableStatements
Lo primero de todo cometaros que podemos obtener más información
acerca de la síntaxis de los procedimientos almacenados de MySQL desde el
siquiente enlace Procedimientos almacenados y funciones.
A partr de MySQL 5.0 cuando se usa con Conector/J 3.1.1 o posterior la
interfaz CallableStatements esta completamente implementada excepto el
metodo getParameterMetaData().
Partimos de la situación inicial de un procedimiento almacenado que
retorna el valor de un inOutParam incrementado en 1 y la cadena de
caracteres pasada via inputParam como Resultset
11. Registramos los parámetros de salida (si existen)
Para recibir los valores de los parámetros de salida (parámetros
especificados como OUT o INOUT cuando se crea el procedimiento), JDBC
requiere que esten especificados antes de la ejecución del statement usando
los distinitos modos de registrar un parámetro con el método
registerOutputParameter():
12. Especificamos los parámetros de entrada (si existen)
Los parámtros de entrada y de entrada/salida se especifican como en los
objetos PreparedStatement . Sin embargo, CallableStatement también
soporta especificar los parámetros por nombre