2010-06-22 40 views

Respuesta

14

Puedes usar PreparedStatement#addBatch() para crear un lote y executeBatch() para ejecutarlo.

Connection connection = null; 
PreparedStatement statement = null; 
try { 
    connection = database.getConnection(); 
    statement = connection.prepareStatement(SQL); 
    for (int i = 0; i < items.size(); i++) { 
     Item item = items.get(i); 
     statement.setString(1, item.getSomeValue()); 
     // ... 
     statement.addBatch(); 
     if ((i + 1) % 100 == 0) { 
      statement.executeBatch(); // Execute every 100 items. 
     } 
    } 
    statement.executeBatch(); 
} finally { 
    if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {} 
    if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {} 
} 

Ver también:

+0

en este enfoque si un registro del lote falla ¿qué pasará ..? se insertarán los registros después del registro fallido ... ¿cómo me aseguro de que se inserte, excepto el registro que falla todos los demás registros ...? – Kaddy

+1

Eso en realidad depende del controlador utilizado. Ver ['executeBatch()' javadoc] (http://java.sun.com/javase/6/docs/api/java/sql/Statement.html#executeBatch%28%29). – BalusC

2

Utilice un lote.

Mira la addBatch(), executeBatch(), etc. Los métodos de Java Statement

para un simple ejemplo, comprobar here (pero se recomienda usar un PreparedStatement)

+0

hay una instrucción por lotes en el servidor SQL o tengo que usar una API ...? – Kaddy

+0

@Kaddy - Yo recomendaría hacerlo en el lado de Java con un lote usando PreparedStatement – froadie

1

Puede pasar una muy cadena larga a SQL con varias inserciones como una declaración a SQL Server. Sin embargo, esto no funcionará si estás haciendo consultas parametrizadas. Y las cadenas de SQL concatenadas son "Generalmente una mala idea".

Puede que sea mejor que observe el comando BULK INSERT. Tiene el problema de ser rígido con los pedidos de columnas y demás. ¡Pero es MUY RÁPIDO!

+0

no puedo usar esto porque no tengo un archivo ... gracias de todos modos ... – Kaddy

+0

sí, es un PITA para escribir el archivo y tal, pero es un buen comando para tener en cuenta. :) –

Cuestiones relacionadas