curso de java

Curso de Java
Desde cero hasta conexiones con bases de datos MySQL

Aplicación: página 6
[ 3, 4, 5, 6, 7, 8, 9 ]

Aplicación de ejemplo

Aplicación de ejemplo

Consultas SQL

Para hacer consultas a la base de datos hacen falta una serie de clases que colaboran para hacer acciones sucesivas: Connection, Statement, ResultSet, ResultSetMetaData y la SQLException.


ConsultasSQL.java

package visorconsultas.controlador;

import java.sql.Connection;

import java.sql.Statement;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.sql.SQLException;

public class ConsultaSQL {

	private Connection conexion; 

	private ResultSet resultadoConsulta;

	private ResultSetMetaData metaDatos;

	private String consulta;

	//Crea dos arreglos

	private String[][] datosDevueltos;

	private String [] nombresColumnas;

	private String error;

    public ConsultaSQL(Connection conRecibida, String consultaRecibida){

    	conexion=conRecibida;

    	consulta=consultaRecibida;

    	try {		

			//Crea una instancia para mandar sentencias al servidor MySQL

			Statement sentencia=conexion.createStatement();

			//Ejecuta la consulta y devuelve el ResultSet

			resultadoConsulta=sentencia.executeQuery(consulta);

			//Obtiene los metadatos del ResultSet	

			metaDatos=resultadoConsulta.getMetaData();

			error=null;

		}

		catch (SQLException e) {

			error=e.getMessage();

		}  	

    }

    public String[][] getDatosDevueltos(){

	    if(error==null){	    

	    	try {	

			//Devuelve el número de columnas del resultset

		    	int columnas=metaDatos.getColumnCount();

			//Lleva el cursor a la última fila del resultset

		    	resultadoConsulta.last();

			//Obtiene el número de fila actual( que aquí es la última)

		    	int filas=resultadoConsulta.getRow();

			//Dimensiona el arreglo datosDevueltos con los enteros obtenidos 	

		    	datosDevueltos=new String[filas][columnas];

			//Ubica el cursor antes del a primera fila

		    	resultadoConsulta.beforeFirst();

		    	for(int i=0;i<filas;i++){

				//Va a la siguiente fila

			    	resultadoConsulta.next();

		    		for(int j=0;j<columnas;j++){

				//Obtiene el valor de cada una de las columnas en la fila actual

		    			datosDevueltos[i][j]=resultadoConsulta.getString(j+1);			    		}

		    	}

		}

		catch (Exception e){

		}

	}

    	return datosDevueltos;

    }

    public String[] getNombresColumnas(){

    	if(error==null){

    	  	try{    	

			//Devuelve el número de columnas

	    		int columnas=metaDatos.getColumnCount();	    	

		    	nombresColumnas=new String[columnas];

		    	for(int i=0;i<columnas;i++){

				//Obtiene el nombre de cada una de las columna 

		    		nombresColumnas[i]=metaDatos.getColumnLabel(i+1);

		    	}

	    	}catch(SQLException ex){

	    	}

	    }	

    	return nombresColumnas;

    }

    public String getMensajeError(){

    	return error;

    } 

}

El constructor de la clase ConsultaSQL recibe como parámetro un objeto de tipo Connection y otro de String; éste contendrá una sentencia SELECT; Statement es una interfaz que puede ejecutar sentencias en lenguaje SQL a través de una conexión; su método executeQuery() recibe la cadena SELECT y devuelve un objeto de tipo ResultSet, que contiene una imagen de los datos devueltos por el servidor MySQL en formato de tabla, es decir, filas y columnas; además los ResultSet tienen un apuntador o cursor que sirve para recorrer los registros de la tabla; el recorrido se hace con métodos como next(). No obstante, no toda la información necesaria está en los datos que ya se obtuvieron (por ejemplo, falta el nombre de las columnas); para obtener dicha información se usan los objetos del tipo ResultSetMetaData.
En la clase que acabamos de escribir, hay dos métodos: getDatosDevueltos() y getNombresColumnas() que darán la información solicitada con la consulta en dos arreglos, uno contiene la tabla y el otro la lista de los nombres de los atributos de dicha tabla. Con ellos se podrán mostrar los datos.
Aquí debemos hablar de los arreglos en Java. Para obtener una colección de datos hay variantes en la declaración y el manejo respecto de las variables individuales. Para empezar, se usan paréntesis cuadrados para su declaración:

String [] nombresColumnas

Si se requiere un arreglo bidimensional se indica desde la creación:

String[][] datosDevueltos

Una vez que el arreglo ha sido declarado, se debe dimensionar:

datosDevueltos= new String[5][4];

Hecho lo cual, se debe inicializar cada uno de los elementos agregando el índice correspondiente en los corchetes:

datosDevueltos[0][0]=“Hola”

Como en todos los lenguajes de programación, los arreglos se leen o escriben casi siempre usando el bucle for como lo hicimos en el código anterior.

[ Anterior | Siguiente ]