Gracias a los 2, squar me ha puesto sobre la pista al decir lo del bloque de sentencias. La solucion la proporciona el propio PreparedStatement.
Para ejecutar bloques esta addBatch. Este es el codigo definitivo.
Código:
public void rellenaTablaTemporal (Connection con, ArrayList lista) throws SQLException
{
System.out.println("bd.inicio" + new java.util.Date());
String consulta = "INSERT INTO CONTAB_TMP_MOVIMIENTOS (ANIO, CTA, DEB_HAB, IMPORTE) VALUES (?,?,?,?)";
PreparedStatement ps = con.prepareStatement(consulta);
TablaHash tabla = null;
for (int i=0;i<lista.size();i++)
{
tabla = (TablaHash) lista.get(i);
ps.setInt(1,tabla.getInt("anio"));
ps.setString(2,tabla.getString("cta",""));
ps.setString(3,tabla.getString("debehab",""));
ps.setFloat(4, tabla.getFloat("total"));
ps.addBatch();
}
ps.executeBatch();
con.commit();
ps.close();
System.out.println("bd.fin" + new java.util.Date());
}
Se ha reducido de 17 segundos a ser casi inmediato. Es lo que tiene la edad, uno olvida cosas.
Gracias a los 2.
Saludos.