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:
e la seguente classe di utilizzocodice: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; }
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 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); } }
che stampa: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(); }
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: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
Dove sbaglio? Non devo usare lo statement o nel resultset? devo inizializzarli in modo diverso?codice:public void eseguiQuery(String query) { try { Statement stmt = db.createStatement(); stmt.executeQuery(query); stmt.close(); } catch (Exception e) { e.printStackTrace(); errore = e.getMessage(); } }

Rispondi quotando