Originariamente inviato da valia
una considerazione:
come ti hanno già detto non apire e chiudere la connessione al database ad ogni ciclo.
Seconda cosa, se i file sono molto grandi, caricare prima il file in memoria e poi passarlo al database non è corretto. Cosa fa la funzione che passa i dati nel db?
Penso che puoi bypassare una copia (se vedo il codice mi rendo conto meglio)
purtroppo non posso baipassare la copia. il file pdf viene copiato pagina per pagina dentro il database. In alcuni casi io devo sbloccare il pdf ed anche il testo della pagina. La classe di utilità pdf la trovate lincata nel post se volete darle un occhiata.
Vi inserisco la classe gestione cosi potete capire meglio il funzionamento e aiutarmi a capire come risolvere il tutto. Le modifiche fatte alla classe Start sono quelle segnalate da rsdpzedrsdpzed
codice:
public class Gestione {
private DatabaseBridge database;
private int protette=0,vuote=0;
public Gestione(String linkDatabase){
database=new DatabaseBridge(linkDatabase);
}
public void caricaPDF(PDF pdf) throws IOException{
String nome=pdf.getNome();
if(!isProcessato(nome)){
if(!pdf.isProtetto()){
database.queryAggiornamento("INSERT INTO files (NomeFile,Protetto,Processato) VALUES ('"+nome+"',0,1)");
caricaTesto(pdf,getIdPDF(nome));
}else{
database.queryAggiornamento("INSERT INTO files (NomeFile,Protetto,Processato) VALUES ('"+nome+"',1,1)");
}
System.out.println("> Caricato nel database "+nome);
System.out.println("-Protetto= "+pdf.isProtetto());
System.out.println("-Pagine-> protette= "+protette+" vuote= "+vuote+" non inserite= "+database.getNonInserite());
}
else
System.out.println("> Preesistente nel database "+nome);
}
private void caricaTesto(PDF pdf, int idPDF) throws IOException {
for(int i=1;i<=pdf.getNumeroPg();i++){
String parole=pdf.getTestoPagina(i);
if(parole!=null)
if(paginaConCaratteri(parole))
database.queryAggiornamento("INSERT INTO testo (IDFile,Pagina,Testo) VALUES ("+idPDF+","+i+",'"+parole+"')");
else
vuote++;
else
protette++;
}
}
private boolean paginaConCaratteri(String parole) {
StringTokenizer st=new StringTokenizer(parole);
while(st.hasMoreTokens())
return st.nextToken()!=" ";
return false;
}
private int getIdPDF(String nome) {
return database.queryRicercaInt("SELECT ID FROM files WHERE files.NomeFile='"+nome+"'");
}
private boolean isProcessato(String nome) {
return database.queryRicercaInt("SELECT Processato FROM files WHERE files.NomeFile='"+nome+"'")==1;
}
public void chiudiConnessione() {
database.chiudi();
}
public void svuotaDatabase(){
database.queryAggiornamento("DELETE FROM testo");
database.queryAggiornamento("DELETE FROM files");
}
}