Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    177

    [Database][Access] Problemi con ResultSet

    Salve
    Ho sviluppato una classe di connessione database access usando la pillola, che si basa su l'uso di ResultSet.
    Considerando questo metodo della classe DatabaseBridge:
    codice:
    public Vector eseguiQuery(String query) {
          Vector v = null;
          String [] record;
          int colonne = 0;
          try {
             Statement stmt = db.createStatement();     
             ResultSet rs = stmt.executeQuery(query);   
             v = new Vector();
             ResultSetMetaData rsmd = rs.getMetaData();
             colonne = rsmd.getColumnCount();
             while(rs.next()) {   
                record = new String[colonne];
                for (int i=0; i<colonne; i++) record[i] = rs.getString(i+1);
                v.add( (String[]) record.clone() );
             }
             rs.close();     
             stmt.close();  
          } catch (Exception e) { 
        	  e.printStackTrace(); 
        	  errore = e.getMessage(); 
          }
          return v;
       }
    e la seguente classe di utilizzo
    codice:
    public class CaricaTesto {
    	private DatabaseBridge contenitoreDati;
    	public CaricaTesto(DatabaseBridge database){
    		contenitoreDati=database;
    	}
    	public void caricaPg(EstrattoreTesto pdf, int pagina,int IDFile) throws IOException{
    		String testo=pdf.getTestoPagina(pagina);
    		contenitoreDati.eseguiQuery("INSERT INTO testo (IDFile,Pagina,Testo) VALUES ("+IDFile+","+pagina+",'"+testo+"')");
    	}
    	public void caricaTesto(EstrattoreTesto pdf,int IDFile) throws IOException {
    		for(int i=1;i<=pdf.getNumeroPg();i++)
    			caricaPg(pdf,i,IDFile);
    	}
    }
    quando io eseguo un main di test il processo esegue correttamente, carica i vari file nel database in modo corretto ma stampa un errore sul resultset.
    codice:
    public static void main(String[] args) throws IOException {
    		FileInputStream f1=new FileInputStream("Lettore a_rmato.pdf");
    		File f2=new File("Lettore a_rmato.pdf");
    		EstrattoreTesto estrattore=new EstrattoreTesto(f1, f2);
    		String [][] parametri = {{"DRIVER", "Microsoft Access Driver (*.mdb)"},
    				{"DBQ", "EstrattorePDF.mdb"}};
    		DatabaseBridge database=new DatabaseBridge("",parametri);
    		if ( !database.connetti() ) {
    			System.out.println("Errore durante la connessione!");
    			System.out.println( database.getErrore() );
    			System.exit(0);
    		}
    		else 
    			System.out.println("La connessione è ok");
    		CaricaTesto ct=new CaricaTesto(database);
    		System.out.println("inizio il caricamento senza resulset");
    		ct.caricaTesto2(estrattore, 13);
    		System.out.println("Caricamento completato");
    		database.disconnetti();
    	}
    che stampa:
    codice:
    La connessione è ok
    inizio il caricamento senza resulset
    java.sql.SQLException: No ResultSet was produced
    	at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(Unknown Source)
    	at database.DatabaseBridge.eseguiQuerySenzaRitorno(DatabaseBridge.java:90)
    	at caricatore.CaricaTesto.caricaPg2(CaricaTesto.java:27)
    	at caricatore.CaricaTesto.caricaTesto2(CaricaTesto.java:49)
    	at caricatore.TestCaricaTesto.main(TestCaricaTesto.java:36)
    // l'errore "No ResultSet was produced" è ripetuto tante volte tante quante sono le tuple inserite
    Caricamento completato
    ho provato a fare vari test e modifiche del metodo esegui query, ma risultato è sempre lo stesso. Di seguito un esempio più leggero di eseguiQuery che stampa lo stesso errore.
    codice:
     public void eseguiQuery(String query) {
    	      try {
    	         Statement stmt = db.createStatement();     
    	         stmt.executeQuery(query);   
    	         stmt.close();   
    	      } catch (Exception e) { 
    	    	  e.printStackTrace(); 
    	    	  errore = e.getMessage(); 
    	      }
    	   }
    Dove sbaglio? Non devo usare lo statement o nel resultset? devo inizializzarli in modo diverso?
    Teo

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    Se devi effettuare un insert devi utilizzare executeUpdate invece di executeQuery

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    177
    Originariamente inviato da Vindav
    Se devi effettuare un insert devi utilizzare executeUpdate invece di executeQuery
    ho usato l'executeUpdate e già va meglio, non genera errori nel caso di un DELETE FROM, ma nel caso INSERT INTO mi da l'avviso:
    codice:
    java.sql.SQLException: General error at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source) at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source) at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(Unknown Source) at sun.jdbc.odbc.JdbcOdbcStatement.execute(Unknown Source) at sun.jdbc.odbc.JdbcOdbcStatement.executeUpdate(Unknown Source) at database.DatabaseBridge.eseguiQuery2(DatabaseBridge.java:90) at caricatore.CaricaTesto.caricaPagina(CaricaTesto.java:23) at caricatore.CaricaTesto.caricaLibro(CaricaTesto.java:34) at caricatore.TestCaricaTesto.main(TestCaricaTesto.java:36)
    Teo

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.