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?