Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [JAVA] Problemi ResultSeti is closed e JTable

    Ciao a tutti, sto sviluppando una piccola applicazione in java che riesce a connettersi al database senza passare dall'ODBC, il problema è che quando provo a passare il risultato di una query ad una JTable il programma genera l'eccezzione RESULT SET IS CLOSED.

    VI posto il codice e l'errore così potete vedere meglio:

    codice:
    /*------------------------metodo connessione db senza ODBC---------------------*/
    	public String ottieniPercorso(){
    		String path = (System.getProperty("user.dir")) + "/SEDUTE.mdb";
    		return path;
    	}
    	
    	public ResultSet openConnection(){
    		Connection con;
    		String query;
    		
    		Statement st = null;
            try{
            	String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
                Class.forName(driver);
                con=DriverManager.getConnection("jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ="+this.ottieniPercorso());
                JOptionPane.showMessageDialog(null,"Connessione Riuscita ","Messaggio:",0,null);
                query="SELECT * FROM sedute";
                st = con.createStatement();	
                this.rs = st.executeQuery(query);
                con.close();
                return this.rs;
            }catch(SQLException | ClassNotFoundException e){                
                JOptionPane.showMessageDialog(null,"Connessione Fallita: "+e.getMessage(),"Messaggio:",0,null);
                return null;
                }
        }
    questa è la parte riguardante la JTable:

    codice:
    JScrollPane areaTabella = new JScrollPane();
    		areaTabella.setBounds(10, 449, 430, 85);
    		menu.add(areaTabella);
    		JTable tabella = new JTable();
    		//CREO LA TABELLA CHE RICEVE IN INGRESSO UN RESULTSET
    		try{
    			ResultSet rs1 = this.openConnection();
    			ResultSetMetaData rsmd = rs1.getMetaData();
    			int numeroColonna = rsmd.getColumnCount();
    			DefaultTableModel modello = new DefaultTableModel();
    			this.tabella.setModel(modello);
    			for(int i = 1; i <= numeroColonna; i++){
    				modello.addColumn(rsmd.getColumnLabel(i));
    			}
    		
    			while(rs1.next()){
    				Object [] riga = new Object[numeroColonna];
    				for(int j=0; j < numeroColonna; j++)
    					riga[j] = rs1.getObject(j+1);
    				modello.addRow(riga);
    			}
    
    
    		
    		}catch(SQLException se){
    			se.printStackTrace();
    		}
    		
    		areaTabella.setViewportView(tabella);
    E questa è l'errore che mi da.

    codice:
    java.sql.SQLException: ResultSet is closed
    	at sun.jdbc.odbc.JdbcOdbcResultSet.checkOpen(Unknown Source)
    	at sun.jdbc.odbc.JdbcOdbcResultSet.getMetaData(Unknown Source)
    	at Gui.initialize(Gui.java:278)
    	at Gui.<init>(Gui.java:93)
    	at Gui$1.run(Gui.java:80)
    	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    	at java.awt.EventQueue.access$200(Unknown Source)
    	at java.awt.EventQueue$3.run(Unknown Source)
    	at java.awt.EventQueue$3.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    	at java.awt.EventQueue.dispatchEvent(Unknown Source)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.run(Unknown Source)

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da diabolik03 Visualizza il messaggio
    codice:
                st = con.createStatement();	
                this.rs = st.executeQuery(query);
                con.close();
                return this.rs;
    Se anche assegni a this.rs (e poi tra l'altro lo ritorni) ma poi fai con.close(), il ResultSet è comunque chiuso. Chiudendo la Connection, chiudi tutte le risorse associate.
    Il tuo problema è di "design", devi affrontare la gestione della Connection e delle query in maniera differente.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Problema risolto in una maniera un po' strana ma risolto!

    Grazie per la risposta e per la disponibilità!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.