Enjoy A New Student Discount All 55,000 Courses on sale for Only $12.99

Ends in 05h 23m 49s

Java para programadores (10.2). Leer registros desde una base de datos

Después de conseguir establecer una conexión y de crear una tabla, ya está hecho lo más dificil, y lo que supongo que interesará ahora, es la posibilidad de leer registro desde una tabla.

Por motivos didácticos, ésta clase repite el proceso de conexión, aunque en producción, deberíamos centralizarlo…

Para poder trabajar con las tablas, a los objetos Connection y Statement utilizados anteriormente, le tenemos que añadir un objeto Resulset que contendrá el cursor que utilizaremos para recorrer la tabla.

Podemos crear una nueva clase dentro de nuestro paquete, fijándonos que esta clase contiene un método static main, por lo que podrá (y tendrá que) ser llamada desde la linea de comando.

La clase quedará así:

package acceso;

import java.sql.*;

public class LeerTablaBaseDatos {
	public static void main (String args[]) {
		Connection conexion=null;
		Statement sql=null;
		ResultSet rs=null;
		try {
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
			try {
			    conexion=DriverManager.getConnection("jdbc:odbc:pruebaCurso");
				System.out.println("Conexión establecida");
				sql=conexion.createStatement();
				rs=sql.executeQuery("SELECT * FROM Libros");
				System.out.println("CONSULTA EJECUTADA");

				boolean r=rs.next();
				while (r) {
					System.out.println(rs.getString("idLibro") + 
                              " - " + rs.getString("Titulo") + " " +
                              rs.getString("Autor") + " " + 
                              rs.getString("Precio"));
					r=rs.next();
				}

				conexion.close();
				System.out.println("CERRADA LA CONEXION");
			} catch (SQLException e) {
				System.out.println
                           ("ERROR AL EJECUTAR LA SENTENCIA SQL");
		  	} 
                        } catch (ClassNotFoundException e) {
			System.out.println("Error del controlador ");
		} 

	} 

}

En esta clase, aparece como novedad:

rs=sql.executeQuery(«SELECT * FROM Libros»);

Utilizamos otro método del objeto Statement, éste nos permite lanzar una orden sql y recoger el resultado en un objeto perteneciente a la clase ResultSet,(rs).

Para procesar todas las filas que haya sido seleccionadas por la query, nos debemos meter en un bucle, utilizando rs como el cursor.

Para saber cuando alcanzamos el final, controlamos que el método next() de Resultset, nos devuelva false, y mientras tanto, vamos recorriendo la tabla con el while.

Para acceder a la información de cada columna, debemos utilizar el método correspondiente de Resultset; aquí tenéis toda la documentación de este objeto

rs.getString(«idLibro»)
rs.getString(«Titulo»)
rs.getString(«Autor»)
….

En este caso,  todas nuestras columnas son Strings…

Para pasar al siguiente registro, realizamos un rs.next() y recogemos su retorno, ya qué será como nos enteraremos que hemos llegado al final.

Devolviendo toda la tabla en Array

Hay ocasiones en que nos interesara convertir la tabla en un array multidimensional, y trabajar después con el Array, Cuando hagamos eso, deberemos evaluar el impacto que puede tener ésta idea en la memoria de nuestro ordenador victima, pero si se necesita…..

	private Object[][] ResultSetToArray(ResultSet rs) {
		Object obj[][] = null;
		int j = 0;
		try {
			rs.last();
			ResultSetMetaData rsmd = rs.getMetaData();
			int numCols = rsmd.getColumnCount();
			int numFils = rs.getRow();
			obj = new Object[numFils][numCols];		
			rs.beforeFirst();
			while (rs.next()) {
				for (int i = 0; i < numCols; i++) {
					obj[j][i] = rs.getObject(i + 1);
				}
				j++;
			}
		} catch (Exception e) {
		}
		return obj;
	}

Os invito a que estudies el método propuesto , observad, p.ejem: que definimos el Array como Object, ya que no conocemos que tipo de datos recibirá, y, por eso mismo, debemos utiliza el método getObject para recuperar la información; antes o después deberemos hacer los cast correspondientes para utilizar la información, pero mientras tanto, es una buena forma de guardarla.

4 comentarios

  1. Me hubiera gustado ver una tabla relaciona o dos talvez (autores y categorías con la tabla libros) y ver de qué forma haces la relación manejando clases y beans

Deja un comentario

/*Si te ha gustado el artículo
no dudes en compartirlo*/

Facebook
Twitter
LinkedIn

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies

Ver mi IP

Ver ip de mi máquina
tipo valor
Ip: 34.224.33.93
Proxy: 34.224.33.93
Remote host: ec2-34-224-33-93.compute-1.amazonaws.com
Remote port: 41962
** 34.224.33.93, 172.70.38.223