Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    207

    Errore ResultSet

    Ho questa classe per interfacciarmi ad un database MySQL:
    codice:
    import java.sql.*;
    
    public class SQLInterface {
    protected Statement stmt;
    protected Connection conn;
    protected ResultSet rset;
    public PreparedStatement[] pstmt; // array dove devo mettere le query piu' usate
    public final String PREFIX = "";
       
       public SQLInterface() throws SQLException{
           try {
              // Load the MySQL JDBC driver
              try {
                 Class.forName("org.gjt.mm.mysql.Driver");
                 } catch (ClassNotFoundException e) {
                      System.out.println ("MySQL device driver does not exist");
                      System.exit(1);
                  }
            }catch (Exception e) {}
           // System.out.println("Driver ok");
        }
        
       public void connect(){
              try{
              // Connect to the database
               // You can put a database name after the @ sign in the connection URL.
             //  System.out.println("Tento la conn");
               conn =
               DriverManager.getConnection ("jdbc:mysql://localhost/Assist","root","");
               //System.out.println("Connessione ok");
               // Create a Statement
               stmt = conn.createStatement ();
               }catch(SQLException e){
                   System.out.println("Error accessing DB ");
                   System.out.println("  Error code is : "+e.getErrorCode());
                   System.out.println("  Error message is :"+e.getMessage());
                   }
        }
        
       public ResultSet SelectQuery(String query) throws SQLException{
          // Select the ENAME column from the EMP table
          rset = stmt.executeQuery (query);
          return rset;
       }
       public void Query(String query) throws SQLException {
          int result = stmt.executeUpdate(query);
       }
       public void disconnect(){
           try{
           
           // Close the Statement
            stmt.close();
          	rset.close();
            // Close the connection
            conn.close();   
      
            }catch(SQLException e){
                System.out.println("Error accessing DB ");
                System.out.println("  Error code is : "+e.getErrorCode());
                System.out.println("  Error message is :"+e.getMessage());
    
                }
        }
    }
    Ora ho dovuto passare ad un DB ACCESS e quindi ho creato un'altra classe che estende la prima:
    codice:
    public class AccessInterface extends SQLInterface{
    
    
    	public AccessInterface() throws SQLException{
    		Connection connessione = null;
    		
    	    try {
    	      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    	      String qsdb = "jdbc:odbc:;DRIVER=Microsoft Access Driver (*.mdb);DBQ=e:/assist/db1.mdb";
    
    	      connessione = DriverManager.getConnection(qsdb,"","");
    	      System.out.println("connessione al db riuscita");
    	      stmt = connessione.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE );
    	    }catch(SQLException e){
                System.out.println("Error accessing DB ");
                System.out.println("  Error code is : "+e.getErrorCode());
                System.out.println("  Error message is :"+e.getMessage());
                }catch (Exception e) {
          	      System.out.println(e.getLocalizedMessage() + " connessione al db NON riuscita");
        	    }
    	}
    	public void connect(){}
    
    }
    Quindi ho semplicemente sostituito nel mio codice gli oggetti SQLInterface con AccessInterface.
    Funziona tutto solo che in console mi da questo errore:
    codice:
    connessione al db riuscita
    
    Error accessing DB 
      Error code is : 0
      Error message is :ResultSet is closed
    Non riesco a capire a cosa si riferisca qualcuno sa darmi una mano????

  2. #2
    allora: chiamata a connessione, il risultato della query e la disconnessione devono stare all'interno dello stesso metodo. Se non ricordo male ho avuto problemi di questo tipo e mi sono accorto di questo particolare.

    per visualizzare il contenuto del "resaultset" devi fare una prima chianata al metodo "next()" e poi fare il tuo ciclo iterativo per prelevare il tutto dall'oggetto "resaultset".
    Per MySQL carico i driver e richiamo la connessione in questo modo.....te lo posto visto che fai in modo differente....magari è qualche altro errore......

    String psw="";
    Class.forName("com.mysql.jdbc.Driver").newInstance ();
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/guestbook?user=root&password="+psw);

    uso i JDBC di MySQL
    spero di esserti stato utile

  3. #3
    bisogna inserire il linguaggio nel titolo della discussione
    ...Terrible warlords, good warlords, and an english song

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    207
    Il problema e' che se uso i driver MYSQL non mi da nessun'errore e funziona tutto correttamente, l'errore sorge quando provo ad usare la classe per Access.Ho pensato di aver implementato qualcosa male ma rivedendo il codice mi sembra corretto,non riesco proprio a capire il significatro di quell'errore.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    207
    up

  6. #6
    Al posto di farti stampare e.getMessage(),stampa direttamente e oppure scrivi e.printStackTrace(System.out) , così ti dice la riga dell'errore

    Ciauz
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    207
    ho fatto e.printStackTrace() e mi stampa questo
    codice:
    java.sql.SQLException: ResultSet is closed
    	at sun.jdbc.odbc.JdbcOdbcResultSet.checkOpen(Unknown Source)
    	at sun.jdbc.odbc.JdbcOdbcResultSet.clearWarnings(Unknown Source)
    	at sun.jdbc.odbc.JdbcOdbcResultSet.close(Unknown Source)
    	at AccessInterface.disconnect(AccessInterface.java:47)
    	at MyTableModel.createObjArray(MyTableModel.java:54)
    	at MyTableModel.<init>(MyTableModel.java:27)
    	at TableDemo.<init>(TableDemo.java:39)
    	at TableDemo.createAndShowGUI(TableDemo.java:88)
    	at TableDemo.main(TableDemo.java:106)
    come faccio a risalire alla riga dell'errore?????
    e' per caso quel (AccessInterface.java:47)????
    alla riga 47 c'e' questo:
    codice:
    	if(rset != null)rset.close();
    il controllo con l'if lo metto xke senno' mi da una NullPointerException in alcuni casi.
    ho provato a togliere questa riga e mi da questo errore:
    codice:
    java.lang.NullPointerException
    	at AccessInterface.disconnect(AccessInterface.java:49)
    	at MyTableModel.createObjArray(MyTableModel.java:54)
    	at MyTableModel.<init>(MyTableModel.java:27)
    	at TableDemo.<init>(TableDemo.java:39)
    	at TableDemo.createAndShowGUI(TableDemo.java:88)
    	at TableDemo.main(TableDemo.java:106)
    Exception in thread "main"
    nella riga 49 c'e' il comando che chiude la connessione:
    codice:
     conn.close();
    se tolgo anche questo non mi da errori pero' cosi' e' come se lasciassi la connessione al db aperta,e nn penso sia buono.
    Qualcuno puo' darmi una mano???

  8. #8
    Bisognerebbe vedere tutto il codice completo delle due classi.
    Può darsi che da qualche parte tu chiuda il resultSet o ne utilizzi uno gia' chiuso
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    207
    pero' se uso la classe che sfrutta MySql invece che access con gli stessi metodi mi funge tutto benissimo

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 © 2024 vBulletin Solutions, Inc. All rights reserved.