Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    111

    [JDBC] "Questo resultset è chiuso"

    Perché è gia chiuso se non l'ho mai letto???

    codice:
    			ConnessioneDB.apriConnessione();
    			// Esegue la select sulla tabella
    			String nomeTabella = "database";
    	    	
    			// Ricava i dati e nomi colonne
    			String stringaSQL = "SELECT * FROM " + nomeTabella;
    			ResultSet rs = ConnessioneDB.lanciaQuery(stringaSQL);
    			String nomiColonne[] = ConnessioneDB.getColumnsName(stringaSQL);
    			
    	        // Scrive l'intestazione della tabella
    	        System.out.println("<div class=\"intestazione\">");
    	        for (int i=0; i<nomiColonne.length; i++) {
    	        	System.out.println("<div class=\"titolo\">" + nomiColonne[i] + "</div>");
    	        }
    	        System.out.println("</div>");
    	        
    	        System.out.println(rs.getString(1));
    	        
    // FIN QUA TUTTO OK
    
    	        // Scrive riga per riga il codice html
    	        while (rs.next()) {           <---------- QUESTO RS è CHIUSO
    	        	System.out.println("<div class=\"record\">");
    		        for (int i=0; i<nomiColonne.length; i++) {
    		        	System.out.println("<div class=\"campo\">" + rs.getString(i) + "</div>");
    		        }
    		        System.out.println("</div>");
    	        }
    	        ConnessioneDB.chiudiConnessione();

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    111
    Risolto, dovevo:
    - aprire la connessione
    - leggere i nomi delle colonne
    - chiudere
    - riaprire la connessione
    - leggere i record
    - chiudere

    Io invece
    - aprivo la connessione
    - leggevo i nomi delle colonne
    - leggevo i record
    - chiudevo

  3. #3
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Non è necessario aprire due volte la connessione.
    Hai oggetti diversi per le due operazioni diverse :

    1) ResultSetMetaData
    2) ResultSet
    3) DatabaseMetaData (non indispensabile)

    Ti allego un esempio valido per quasi tutti i DBMS (con ACCESS ovviamente, devi modificarlo un po')

    codice:
    /*
     * Dumper.java
     *
     * Created on 22 novembre 2006, 23.14
     *
     * To change this template, choose Tools | Template Manager
     * and open the template in the editor.
     */
    
    /**
     *
     * @author Brainjar
     */
    /*
     * Dumper.java
     *
     * Created on September 9, 2002, 11:22 AM
     *
    
     */
    import java.sql.*;
    import java.util.*;
    public class Dumper {
        public static void main(String args[]) {
            try{
                // Load the driver
                String ibmDbURL   = "jdbc:....................";
                Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();
                
                // Connect to the database
                Connection connection=DriverManager.getConnection(ibmDbURL, "user", "password" );            
    
                // Get database meta data
                DatabaseMetaData meta = connection.getMetaData();
                
                // Display meta data information
                System.out.println("Database: "+meta.getDatabaseProductName());
                System.out.println("Product version "+meta.getDatabaseProductVersion());
                System.out.println("User name: "+meta.getUserName());
                System.out.println("Driver: "+meta.getDriverName());
                System.out.println("Driver version: "+meta.getDriverVersion());
                System.out.println("SQL keywords: "+meta.getSQLKeywords());
                
                
                System.out.println("===================================");
                System.out.println("Schema term: "+meta.getSchemaTerm());
                System.out.println("===================================");
                System.out.println("Catalog term: "+meta.getCatalogTerm());
                System.out.println("===================================");
                
                String [] sa = { "none" };
                ResultSet rsCatalogs = meta.getCatalogs();
                while (rsCatalogs.next()) {
                    System.out.println("For " + rsCatalogs.getString(1));
                    
                        ResultSet rsTables = meta.getTables(null, null, "%", null );
                            ResultSetMetaData mdTables = rsTables.getMetaData();
                            int columnCount = mdTables.getColumnCount();
                            
                            for(int i=1; i<columnCount; i++) {
                                System.out.print("\t\t" + mdTables.getColumnName(i) + "\t");
                            }
                            System.out.println("");
                            
                            while (rsTables.next()) {
                                for(int i=1; i<columnCount; i++) {
                                    System.out.print("\t\t" + rsTables.getString(i) + "\t");
                                }
                                System.out.println("");
                            }
                        rsTables.close();
                        
                }
                rsCatalogs.close();
                // Close the database
                // ---------------------------------------------------------------------------
                // In questo punto hai ancora la connessione aperta e puoi fare la tua query e
                // utilizzare il tuo oggetto resultset .......
                // ---------------------------------------------------------------------------
                connection.close();
    
            }catch(Exception ex){
                System.out.println(ex);
                System.exit(0);
            }
        }
    }
    Ciao, Brainjar

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    111
    Si è giusto come dici te ma io apro e chiudo la connessione con metodi diversi, non è tutto su una stessa classe.

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.