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