
Curso de Java
Desde cero hasta conexiones con bases de datos MySQL
Curso de Java: Contenido
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.