Ver Mensaje Individual
  #4 (permalink)  
Antiguo 22/06/2009, 02:08
Avatar de elAntonie
elAntonie
 
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 11 meses
Puntos: 10
Respuesta: Problemas de tiempo al hacer insert masivos sobre una tabla temporal oracl

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.