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?