I need to improve the performance of my code. I have the following code:
public List<ArticoliDett> settaArticoliPreSalvataggio(Iterator iteratore){
try{
List<ArticoliDett> listaArticoliPre=new ArrayList<ArticoliDett>();
while(iteratore.hasNext()){
Object obj = iteratore.next();
if(obj instanceof FatturaArticoli){
FatturaArticoli articoloF = (FatturaArticoli) obj;
if(articoloF.getIsLavoro()!=null && articoloF.getIsLavoro())
continue;
if(!articoloF.getCodiceArticolo().equalsIgnoreCase("-")
&& !articoloF.getCodiceArticolo().equals(WFConst.COD_RITENUTA_ACCONTO)
&& !articoloF.getCodiceArticolo().equals(WFConst.CODICE_IBAN)){
ArticoliDett articoloPre = modelManager.getArticoliManager().estraiArticoloCompleto(Integer.parseInt(articoloF.getCodiceArticolo()), false);
if(articoloPre!=null){
if(articoloF.getNomeArticolo().contains("(Articolo Gratuito)"))
articoloPre.setNomeArticolo(articoloPre.getNomeArticolo()+" (Articolo Gratuito)");
listaArticoliPre.add(articoloPre);
}
else{
return null;
}
}
}
}
return listaArticoliPre;
}catch(Exception e){
log.logStackTrace(e);
return null;
}
}
For every item inside Iterator
I need to make a query on my database. The line is this:
modelManager.getArticoliManager().estraiArticoloCompleto(Integer.parseInt(articoloF.getCodiceArticolo()), false);
I see that line is to slow.
This is the estraiArticoloCompleto
method that get Article
s from database:
public ArticoliDett estraiArticoloCompleto(int idArticolo, Boolean estraiArticoloPerFornitore){
ArticoliDett articolo = new ArticoliDett();
String query="SELECT CODARTIcOLO,nomearticolo,soglia,prezzomedio,"
+ "quantita,prezzoattuale,prezzorivenditore, "
+ "prezzoingrosso,iva,quantitacartone,quantitaPedane, "
+ "IN_SCHEDA_LAVORO, IS_LAVORO "
+ "FROM VISTAARTICOLI "
+ "WHERE codarticolo=?";
try {
PreparedStatement stmt = db.prepareStatement(query);
stmt.setInt(1, idArticolo);
ResultSet rs = stmt.executeQuery();
while(rs.next()) {
int nColumn = 1;
articolo.setCodArticolo(rs.getInt(nColumn++));
articolo.setNomeArticolo(rs.getString(nColumn++));
articolo.setSoglia(rs.getInt(nColumn++));
articolo.setPrezzoMedioVendita(rs.getDouble(nColumn++));
Articoli artGiacenza = new Articoli();
artGiacenza.setCodArticolo(articolo.getCodArticolo());
artGiacenza.setQuantita(rs.getInt(nColumn++));
artGiacenza.setPrezzoAttuale(rs.getDouble(nColumn++));
artGiacenza.setPrezzoRivenditore(rs.getDouble(nColumn++));
artGiacenza.setPrezzoIngrosso(rs.getDouble(nColumn++));
artGiacenza.setIva(rs.getInt(nColumn++));
artGiacenza.setPezziCartone(rs.getInt(nColumn++));
artGiacenza.setPezziPedana(rs.getInt(nColumn++));
artGiacenza.setNomeArticolo(articolo.getNomeArticolo());
artGiacenza.setInSchedaLavoro(rs.getInt(nColumn++) == 1 ? true : false);
artGiacenza.setIsLavoro(rs.getInt(nColumn++) == 1 ? true : false);
//articolo.setArticoloGiacenze(estraiArticoloComposizionePerFattura(idArticolo,false,null));
articolo.setArticoloGiacenze(artGiacenza);
if(estraiArticoloPerFornitore)
articolo.getArticoloGiacenze().setArticoliFornitore(estraiArticoliPerFornitore(idArticolo));
}
rs.close();
stmt.close();
} catch (Exception e) {
log.logStackTrace(e);
}
return articolo;
}
(condition ? true : false)
can be simplified to(condition)
codarticolo
, in [database] tableVISTAARTICOLI
a unique key? In other words, will the [SQL] query (in methodestraiArticoloCompleto
) always return a single row?rs.getInt(nColumn++) == 1 ? true : false
just dors.getInt(nColumn++) == 1
- less code = less chance of bugs.