Hola a todos
Estoy aprendiendo java por mi cuenta y tengo una duda:
Seguí los pasos de esta página: http://casidiablo.net/consultar-base-datos-java-mostrar-resultados-jtable/ y logré que funcione con postgreSQL.
Lo que quiero hacer -por ahora- es que la consulta se realice al presionar un Jbutton. Lo he tratado de acomodar, pero el resultado se muestra en el mismo Jframe donde está el botón, y lo que quisiera es que se muestre en una ventana aparte o en un área distinta de la misma ventana.
Estoy usando Netbeans y he creado un Jframeform y una clase con los siguientes códigos, con comentarios y todo:
No debe ser muy difícil, pero me estoy haciendo bolas, agradezco vuestra ayuda porfa
java1 por santiagobruja, en Flickr
java2 por santiagobruja, en Flickr
Estoy aprendiendo java por mi cuenta y tengo una duda:
Seguí los pasos de esta página: http://casidiablo.net/consultar-base-datos-java-mostrar-resultados-jtable/ y logré que funcione con postgreSQL.
Lo que quiero hacer -por ahora- es que la consulta se realice al presionar un Jbutton. Lo he tratado de acomodar, pero el resultado se muestra en el mismo Jframe donde está el botón, y lo que quisiera es que se muestre en una ventana aparte o en un área distinta de la misma ventana.
Estoy usando Netbeans y he creado un Jframeform y una clase con los siguientes códigos, con comentarios y todo:
No debe ser muy difícil, pero me estoy haciendo bolas, agradezco vuestra ayuda porfa
Código:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/*
* Buscar.java
*
* Created on 03/09/2011, 11:58:35 AM
*/
package Botonbusca;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
/**
*
* @author Sistemas
*/
public class Buscar extends javax.swing.JFrame {
// controlador JDBC y URL de la base de datos
static final String CONTROLADOR_JDBC = "org.postgresql.Driver";
static final String URL_BASEDEDATOS = "jdbc:postgresql://localhost:5433/ejemplo?user=postgres&password=postgres";
// la consulta predeterminada recupera todos los datos de la tabla autores
static final String CONSULTA_PREDETERMINADA = "SELECT * FROM datos";
private ModeloTablaResultados modeloTabla;
private JTextArea areaConsulta;
/** Creates new form Buscar */
public Buscar() {
super( "Mostrando resultados de la consulta" );
initComponents();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
jToggleButton1 = new javax.swing.JToggleButton();
jScrollPane1.setName("jScrollPane1"); // NOI18N
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jToggleButton1.setText("Mostrar");
jToggleButton1.setName("jToggleButton1"); // NOI18N
jToggleButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jToggleButton1ActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(159, 159, 159)
.addComponent(jToggleButton1)
.addContainerGap(172, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(57, Short.MAX_VALUE)
.addComponent(jToggleButton1)
.addGap(220, 220, 220))
);
pack();
}// </editor-fold>
private void jToggleButton1ActionPerformed(java.awt.event.ActionEvent evt) {
//super( "Mostrando resultados de la consulta" );
// crear objeto ModeloTablaResultados y mostrar tabla de la base de datos
try {
// crear objeto TableModel para los resultados del a consulta SELECT * FROM autores
modeloTabla = new ModeloTablaResultados( CONTROLADOR_JDBC, URL_BASEDEDATOS,
CONSULTA_PREDETERMINADA );
JTable tablaResultados = new JTable(modeloTabla);
getContentPane().setLayout(new BorderLayout());
getContentPane().add( new JScrollPane(tablaResultados) , BorderLayout.CENTER );
// establecer tamaño de ventana y mostrarla en pantalla
setSize( 500, 250 );
setVisible( true );
} // fin de bloque try
// atrapar la excepción 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 aplicación
} // fin de bloque catch
// atrapar la excepción SQLException lanzada por el objeto ModeloTablaResultados
// si ocurren problemas al establecer la conexión 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 conexión a la base de datos esté cerrada
modeloTabla.desconectarDeLaBaseDeDatos();
System.exit( 1 ); // terminar la aplicación
}
// desechar la ventana cuando el usuario salga de la aplicación
// (esta opción sobrescribe a la opción predeterminada de HIDE_ON_CLOSE)
setDefaultCloseOperation( DISPOSE_ON_CLOSE );
// asegurar que la conexión a la base de datos esté cerrada cuando el usuario salga de la aplicación
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 );
}
}
);
// TODO add your handling code here:
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
JFrame.setDefaultLookAndFeelDecorated(true);
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Buscar().setVisible(true);
}
});
//new MostrarResultadosConsulta();
}
// Variables declaration - do not modify
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JToggleButton jToggleButton1;
// End of variables declaration
}
Código:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Botonbusca;
//import desktopapplication1.*;
import 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 número de fila o columnas para manipular la
// columna apropiada del objeto ResultSet (es decir, la columna 0 del objeto
//JTable es la columna 1 del objeto ResultSet y la fila 0 del objeto JTable es
//la fila 1 del objeto ResultSet).
/**
*
* @author Sistemas
*/
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 conexión a la base de datos
private boolean conectadoALaBaseDeDatos=false;
//inicializar conjuntoResultados y obtener su objeto de meta datos
//determinar el número 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 el estado de la conexión a la base de datos
conectadoALaBaseDeDatos=true;
//establecer consulta y ejecutarla
establecerConsulta(consulta);
}
//obtener la clase que representa al tipo de coluna
public Class getColumnClass(int columna) throws IllegalStateException{
//asegurar que la conexión a la base de datos esté disponible
if (!conectadoALaBaseDeDatos)
throw new IllegalStateException("No hay conexión 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);
}
//atrapa excepciones SQLException y ClassNotFoundException
catch (Exception excepcion){
excepcion.printStackTrace();
}
//si ocurren problemas arriba, suponer que es tipo Object
return Object.class;
}
//obtener el número de columnas en el objeto ResultSet
public int getColumnCount() throws IllegalStateException{
//asegurar que la conexión a la base de datos esté disponible
if(!conectadoALaBaseDeDatos)
throw new IllegalStateException("No hay conexión a la base de datos");
//determinar el número 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 número de columnas
return 0;
}
//obtener el nombre de una columna específica en el objeto ResultSet
public String getColumnName(int columna) throws IllegalStateException{
//asegurar que la base de datos esté disponible
if(!conectadoALaBaseDeDatos)
throw new IllegalStateException("No hay conexión 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 vacía para el nombre de la columna
return "";
}
//devolver el número de 11 filas en el objeto ResulSet
public int getRowCount() throws IllegalStateException {
//asegurar que la conexión a la base de datos esté disponible
if(!conectadoALaBaseDeDatos)
throw new IllegalStateException("No hay conexión a la base de datos");
return numeroDeFilas;
}
//obtener un valor en una fila y columna específicas del objeto ResultSet
public Object getValueAt(int fila, int columna) throws IllegalStateException{
//asegurar que la conexión a la base de datosesté disponible
if (!conectadoALaBaseDeDatos)
throw new IllegalStateException("No hay conexión a la base de datos");
//obtener un valor en una fila y columna específicas 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();
}
//su hay problemas, devolver objeto cadena vacía
return "";
}
//establecer nueva cadena de consulta para la base de datos
public void establecerConsulta(String consulta)throws SQLException, IllegalStateException{
//asegurar que la conexión a la base de datos esté disponible
if(!conectadoALaBaseDeDatos)
throw new IllegalStateException("No hay conexión 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 número de filas en el objeto ResultSet
conjuntoResultados.last(); //mover a la última fila
numeroDeFilas=conjuntoResultados.getRow(); //obtener número de fila
//notificar al objeto JTable que el modelo ha cambiado
fireTableStructureChanged();
}
//cerrar los 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 conexión a la base de datos
finally{
conectadoALaBaseDeDatos=false;
}
}
}
java1 por santiagobruja, en Flickr
java2 por santiagobruja, en Flickr