Una vez hecha la conexión, podemos empezar a lanzar órdenes sobre la base de datos; para hacerlo necesitamos un:
- Statement – Nos permite lanzar consultas a la base de datos.
- PreparedStatement – Nos permite guardar consultas con parámetros variables, que podremos modificar antes de ejecutarlas.
Cuando terminemos de utilizar uno de estos objetos, deberemos utilizar su método close() para liberar los recursos que haya podido reservar.
Trabajando con Statemen
Esta clase tiene tres métodos
- executeQuery – Ejecuta la orden SQL dada y devuelve un objeto ResultSet con el conjunto de filas y columnas seleccionadas. Solo utilizaremos este método para las ordenes SELECT
- executeUpdate – Ejecuta la orden SQL dada pero solo devuelve un int con el número de filas afectadas. Utilizaremos este método para cualquier orden, menos la SELECT
- execute – Devuelve True si se ha conseguido un Resultset, si no, devuelve False. Deberemos utilizar este método cuando no conozcamos el contenido del SQL por lo que no podamos tomar la decisión de utilizar executeQuery o executeUpdate.
Si queremos realizar un Insert, podemos hacer:
Y nos devolverá en result el número de filas afectadas, 1 en este caso
Si queremos realizar un SELECT para obtener la lista de todas las provincias, haremos
Trabajando con PreparedStatemen
Esta clase tiene mucha semejanza con Statement, por lo que tiene sus mismos tres métodos para ejecutar querys (executeQuery, executeUpdate, y execute.
La diferencia reside en que podemos dejar preparada la query, pero dejando variables por resolver, que las cumplimentaremos con los valores que nos interés.
Por ejemplo, si necesitamos seleccionar una provincia en concreto, podríamos hacer:
Pero esto solo nos permitiría seleccionar la provincia 1. Con PreparedStatement podemos hacer:
Y cuando lo necesitáramos, haríamos
Incorporando los parámetros que habíamos dejado con un ‘?’
Para ello disponemos de los métodos necesarios para los tipos de java (setInt, setFloat, setDouble, setString,…..) , que reciben dos parámetros el primero es un int que indica la posición que se va a sustituir, y el segundo es el valor a sustituir. En nuestro ejemplo, hemos sustituido el primer (1) interrogante, por el valor2
Manipulación de resultados con ResultSet
El objeto Resultset representa en nuestro programa, el resultado de un SELECT, por lo que tiene acceso a todas las filas y columnas seleccionadas
Realmente, este objeto, en un momento determinado, solo tiene acceso a todas las columnas de UNA fila de nuestra consulta, por lo que deberemos ir haciendo avanzar el ResutSet, para poder acceder a toda la información.
Cuando hemos terminado de crearlo con un SELECT, Resultset está apuntando a una fila inexistente, por lo que para poder leer la primera fila, deberemos avanzar una, y eso lo haremos con next(). Un objeto ResultSet, por defecto, solo se puede mover hacia adelante.
Después de cada orden, deberemos comprobar si se ha llegado al final de la selección, controlando que no de false. Luego, ya podemos leer su información, utilizando el método adecuado. Aquí tenemos un ejemplo de cómo podríamos leer nuestra tabla de Provincias y volcar la información en la consola.
Este objeto también dispone de métodos para recoger cualquier tipo java (getInt, getDouble, getString), y en cada caso, deberemos indicar el nombre de la columna que deseamos obtener.
Cuando el Resultset es “scrollable” (que se puede desplazar atrás y adelante), disponemos de métodos para hacer avanzar el puntero de resultset al primer registro, al ultimo, avanzar de uno en uno, adelante y atras… Naturalmente, esto hace mas lenta la operación, por lo que solo escogeremos esta posibilidad, cuando lo necesitemos.
Para que un resultset sea scrollable, deberemos usar un Statement creado para esa funcionalidad con
Y si es con PreparedStatement, deberemos hacer (en el ejemplo anterior)
Este tiene la posibilidad de poder cambiar su posición con
previous() | Vuelve a la posición que estaba antes del ultimo next() |
first() | Va a la primera posición del actual conjunto |
beforeFist() | Deja el cursor en el mismo punto que estaba tras realizar el SELECT, esto es, apuntando a un punto justamente anterior al primer registro. |
last() | Se posiciona en el último registro de este conjunto |
absolute(int fila) | Se posiciona en el registro indicado por “fila” contando desde el principio del conjunto |
relative(int fila) | Se mueve tantas filas como indique “fila”, que puede ser positivo o negativo. |
getRow() | Devuelve el número de fila (registro) actual |
Tambien podemos preguntar por la posición del cursor con
isFirst() | Indica si el cursor está en la primera fila de resultados |
isLast() | Indica si el cursor está en la ultima fila de resultados |
isBeforeFirst | Indica se está antes de la primera fila , deberemos realizar un next() antes de poder leer las columnas |
isAfterLast() | Indica si ya se ejecutó el ultimo next(), ya no podemos acceder a información. |
Hay más información del objeto ResultSet en https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html
Relacionado
Descubre más desde Recursos para formacion
Suscríbete y recibe las últimas entradas en tu correo electrónico.