1062

Capítulo 25 Acceso a bases de datos con JDBC

Observación de ingeniería de software 25.7

Cada objeto 

Statement

 puede abrir solamente un objeto 

ResultSet

en un momento dado. Cuando un objeto 

Statement

 devuelve un nuevo objeto 

ResultSet

, el objeto 

Statement

cierra el objeto 

ResultSet

anterior. Para 

utilizar varios objetos 

ResultSet

en paralelo, se deben usar objetos 

Statement

 separados para devolver los objetos 

ResultSet

.

25.8.2 Consultas en la base de datos 

libros

El siguiente ejemplo (fi guras 25.25 y 25.28) permite al usuario introducir cualquier consulta en el programa. 
Este ejemplo muestra el resultado de una consulta en un objeto 

JTable

, utilizando un objeto 

TableModel

 para 

proporcionar los datos del objeto 

ResultSet

 al objeto 

JTable

. Un objeto 

JTable

 es un componente de la GUI 

de Swing que puede enlazarse a una base de datos para mostrar los resultados de una consulta. La clase 

Result-

SetTableModel

 (fi gura 25.25) realiza la conexión a la base de datos por medio de un objeto 

TableModel

 y man-

tiene el objeto 

ResultSet

. La clase 

MostrarResultadosConsulta

(fi gura 25.28) crea la GUI y especifi ca una 

instancia de la clase 

ResultSetTableModel

 para proporcionar datos para el objeto 

JTable

La clase 

ResultSetTableModel

La clase 

ResultSetTableModel

(fi gura 25.25) extiende a la clase 

AbstractTableModel

(paquete 

javax.swing.

table

), la cual implementa a la interfaz 

TableModel

. La clase 

ResultSetTableModel

 sobrescribe a los métodos 

getColumnClass

getColumnCount

getColumnName

getRowCount

 y 

getValueAt

de 

TableModel

. Las imple-

mentaciones predeterminadas de los métodos 

isCellEditable

 y 

setValueAt

de 

TableModel

(proporcionados 

por 

AbstractTableModel

) no se sobrescriben, ya que este ejemplo no soporta la capacidad de editar las celdas 

del objeto 

JTable

. Tampoco se sobrescriben las implementaciones predeterminadas de los métodos 

addTable-

ModelListener

 y 

removeTableModelListener

de 

TableModel

(proporcionados por 

AbstractTableModel

), 

ya que las implementaciones de estos métodos de 

AbstractTableModel

 agregan y eliminan apropiadamente los 

componentes de escucha de eventos.

 1 

// Fig. 25.25: ResultSetTableModel.java

 2 

// Un objeto TableModel que suministra datos ResultSet a un objeto JTable.

 3 

import

 java.sql.Connection;

 4 

import

 java.sql.Statement;

 5 

import

 java.sql.DriverManager;

 6 

import

 java.sql.ResultSet;

 7 

import

 java.sql.ResultSetMetaData;

 8 

import

 java.sql.SQLException;

 9 

import

 javax.swing.table.AbstractTableModel;

 10
 11 

// las filas y columnas del objeto ResultSet se cuentan desde 1 y

 12 

// las filas y columnas del objeto JTable se cuentan desde 0. Al procesar

 13 

// filas o columnas de ResultSet para usarlas en un objeto JTable, es

 14 

// necesario sumar 1 al número de fila o columna para manipular

 15 

// la columna apropiada del objeto ResultSet (es decir, la columna 0 de JTable

 16 

// es la columna 1 de ResultSet y la fila 0 de JTable es la fila 1 de ResultSet).

 17 

public class

 ResultSetTableModel 

extends

 AbstractTableModel 

 18 

{

 19  

private

 Connection conexion;

 20  

private

 Statement instruccion;

 21  

private

 ResultSet conjuntoResultados;

 22  

private

 ResultSetMetaData metaDatos;

 23  

private

 int numeroDeFilas;

 24
 25  

// lleva la cuenta del estado de la conexión a la base de datos

 26  

private boolean

 conectadoABaseDatos = 

false

;

Figura 25.25

  |  Un objeto 

TableModel

 que suministra datos 

ResultSet

 a un objeto 

JTable

. (Parte 1 de 4).

25_MAQ_CAP_25_DEITEL.indd1062

4/19/081:35:50AM