Está en la página 1de 5

imfport java.sql.*; import java.util.*; import javax.swing.table.

*; // Las filas y columnas del objeto ResultSet se cuentan desde 1 y las filas // y columnas del objeto JTable se cuentan desde 0. Al procesar filas // o columnas del objeto ResultSet para usarlas en un objeto JTable, es // necesario sumar 1 al nmero de fila o columnas para manipular la // columna apropiada del objeto ResultSet (es decir, la columna 0 del objeto JTa ble // es la columna 1 del objeto ResultSet y la fila 0 del objeto JTable es la fila 1 del objeto ResultSet). public class ModeloTablaResultados extends AbstractTableModel { private Connection conexion; private Statement instruccion; private ResultSet conjuntoResultados; private ResultSetMetaData metaDatos; private int numeroDeFilas; // mantener el registro del estado de la conexin a la base de datos private boolean conectadoALaBaseDeDatos = false; // inicializar conjuntoResultados y obtener su objeto de meta datos; // determinar el nmero de filas public ModeloTablaResultados( String controlador, String url, String consulta ) throws SQLException, ClassNotFoundException { // cargar clase de controlador de base de datos Class.forName( controlador ); // conectarse a la base de datos conexion = DriverManager.getConnection( url ); // crear objeto Statement para consultar la base de datos instruccion = conexion.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY ); // actualizar estado de conexin a la base de datos conectadoALaBaseDeDatos = true; // establecer consulta y ejecutarla establecerConsulta( consulta ); } // obtener la clase que representa al tipo de columna public Class getColumnClass( int columna ) throws IllegalStateException { // asegurar que la conexin a la base de datos est disponible if ( !conectadoALaBaseDeDatos ) throw new IllegalStateException( "No hay conexion a la base de datos " ); // determinar la clase de Java de columna try { String nombreClase = metaDatos.getColumnClassName( columna + 1 ); // devolver objeto Class que representa a nombreClase return Class.forName( nombreClase ); } // atrapar excepciones SQLException y ClassNotFoundException catch ( Exception excepcion ) { excepcion.printStackTrace(); } // si ocurren problemas arriba, suponer que es tipo Object return Object.class; } // obtener el nmero de columnas en el objeto ResultSet public int getColumnCount() throws IllegalStateException { // asegurar que la conexin a la base de datos est disponible if ( !conectadoALaBaseDeDatos ) throw new IllegalStateException( "No hay conexion a la base de datos

" ); // determinar el nmero de columnas try { return metaDatos.getColumnCount(); } // atrapar excepciones SQLException e imprimir mensaje de error catch ( SQLException excepcionSQL ) { excepcionSQL.printStackTrace(); } // si ocurren problemas arriba, devolver 0 para el nmero de columnas return 0; } // obtener el nombre de una columna especfica en el objeto ResultSet public String getColumnName( int columna ) throws IllegalStateException { // asegurar que la conexin a la base de datos est disponible if ( !conectadoALaBaseDeDatos ) throw new IllegalStateException( "No hay conexion a la base de datos " ); // determinar el nombre de la columna try { return metaDatos.getColumnName( columna + 1 ); } // atrapar excepciones SQLException e imprimir mensaje de error catch ( SQLException excepcionSQL ) { excepcionSQL.printStackTrace(); } // si hay problemas, devolver cadena vaca para el nombre de la columna return ""; } // devolver el nmero de filas en el objeto ResultSet public int getRowCount() throws IllegalStateException { // asegurar que la conexin a la base de datos est disponible if ( !conectadoALaBaseDeDatos ) throw new IllegalStateException( "No hay conexion a la base de datos " ); return numeroDeFilas; } // obtener el valor en una fila y columna especficas public Object getValueAt( int fila, int columna ) throws IllegalStateExcepti on { // asegurar que la conexin a la base de datos est disponible if ( !conectadoALaBaseDeDatos ) throw new IllegalStateException( "No hay conexion a la base de datos " ); // obtener un valor en una fila y columna especficas del objeto ResultSet try { conjuntoResultados.absolute( fila + 1 ); return conjuntoResultados.getObject( columna + 1 ); } // atrapar excepciones SQLExceptions e imprimir mensaje de error catch ( SQLException excepcionSQL ) { excepcionSQL.printStackTrace(); } // si hay problemas, devolver objeto cadena vaca return ""; } // establecer nueva cadena de consulta para la base de datos public void establecerConsulta( String consulta )throws SQLException, Illega lStateException {

// asegurar que la conexin a la base de datos est disponible if ( !conectadoALaBaseDeDatos ) throw new IllegalStateException( "No hay conexion a la base de datos " ); // especificar consulta y ejecutarla conjuntoResultados = instruccion.executeQuery( consulta ); // obtener meta datos para el objeto ResultSet metaDatos = conjuntoResultados.getMetaData(); // determinar el nmero de filas en el objeto ResultSet conjuntoResultados.last(); // mover a la ltima fila numeroDeFilas = conjuntoResultados.getRow(); // obtener nmero de fila // notificar al objeto JTable que el modelo ha cambiado fireTableStructureChanged(); } // cerrar objetos Statement y Connection public void desconectarDeLaBaseDeDatos() { // cerrar objetos Statement y Connection try { instruccion.close(); conexion.close(); } // atrapar excepciones SQLException e imprimir mensaje de error catch ( SQLException excepcionSQL ) { excepcionSQL.printStackTrace(); } // actualizar estado de conexin a la base de datos finally { conectadoALaBaseDeDatos = false; } } } // fin de la clase ResultSetTableModel

_______________________________________________________________________________i mport java.awt.*; import java.awt.event.*; import java.sql.*; import java.util.*;

import javax.swing.*; import javax.swing.table.*; public class MostrarResultadosConsulta extends JFrame { // controlador JDBC y URL de la base de datos static final String CONTROLADOR_JDBC = "com.microsoft.sqlserver.jdbc.SQLServ erDriver"; static final String URL_BASEDEDATOS = "jdbc:sqlserver://localhost:1433;datab aseName=ControlEscolar;integratedSecurity=true;"; /*controlador de my sql static final String CONTROLADOR_JDBC = "com.mysql.jdbc.Driver"; static final String URL_BASEDEDATOS = "jdbc:mysql://localhost/ejemplo?user=r oot&password="; */ // la consulta predeterminada recupera todos los datos de la tabla autores static final String CONSULTA_PREDETERMINADA = "SELECT * FROM Alumnos"; private ModeloTablaResultados modeloTabla; private JTextArea areaConsulta; // crear objeto ModeloTablaResultados y GUI public MostrarResultadosConsulta() { super( "Mostrando resultados de la consulta" ); // crear objeto ModeloTablaResultados y mostrar tabla de la base de dato s try { // crear objeto TableModel para los resultados del a consulta SELECT * FROM autores modeloTabla = new ModeloTablaResultados( CONTROLADOR_JDBC, URL_BASED EDATOS, CONSULTA_PREDETERMINADA ); JTable tablaResultados = new JTable(modeloTabla); getContentPane().setLayout(new BorderLayout()); getContentPane().add( new JScrollPane(tablaResultados) , BorderLayou t.CENTER ); // establecer tamao de ventana y mostrarla en pantalla setSize( 500, 250 ); setVisible( true ); } // fin de bloque try // atrapar la excepcin ClassNotFoundException lanzada por el // objeto ModeloTablaResultados si no se encuentra el controlador de la base de datos catch ( ClassNotFoundException claseNoEncontrada ) { JOptionPane.showMessageDialog( null, "No se encontro el controlador de la base de datos", "No se encontro el controlador", JOptionPane.ERROR_MESSAGE ); System.exit( 1 ); // terminar la aplicacin } // fin de bloque catch // atrapar la excepcin SQLException lanzada por el objeto ModeloTablaResu ltados // si ocurren problemas al establecer la conexin a la base de datos // y realizar la consulta en la misma catch ( SQLException excepcionSQL ) { JOptionPane.showMessageDialog( null, excepcionSQL.getMessage(), "Error en la base de datos", JOptionPane.ERROR_MESSAGE ); // asegurar que la conexin a la base de datos est cerrada modeloTabla.desconectarDeLaBaseDeDatos(); System.exit( 1 ); // terminar la aplicacin } // desechar la ventana cuando el usuario salga de la aplicacin // (esta opcin sobrescribe a la opcin predeterminada de HIDE_ON_CLOSE)

setDefaultCloseOperation( DISPOSE_ON_CLOSE ); // asegurar que la conexin a la base de datos est cerrada cuando el usuari o salga de la aplicacin addWindowListener( new WindowAdapter() { // desconectarse de la base de datos y salir cuando se haya cerrado la ventana public void windowClosed( WindowEvent evento ) { modeloTabla.desconectarDeLaBaseDeDatos(); System.exit( 0 ); } } ); } // fin del constructor de MostrarResultadosConsulta // ejecutar la aplicacin public static void main( String args[] ) { JFrame.setDefaultLookAndFeelDecorated(true); new MostrarResultadosConsulta(); } } // fin de la clase MostrarResultadosConsulta

También podría gustarte