2010-06-22 11 views

risposta

14

È possibile utilizzare PreparedStatement#addBatch() per creare un batch e executeBatch() per eseguirlo.

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) {} 
} 

Vedi anche:

+0

in questo approccio se un record del batch fallisce cosa succederà ..? verranno inseriti i record dopo il record fallito ... come posso assicurarmi che tranne il record che non riesce a inserire tutti gli altri record ...? – Kaddy

+1

In realtà dipende dal driver utilizzato. Vedi ['executeBatch()' javadoc] (http://java.sun.com/javase/6/docs/api/java/sql/Statement.html#executeBatch%28%29). – BalusC

2

Utilizzare un lotto.

Scopri i addBatch(), executeBatch(), ecc metodi di Java Statement

per un semplice esempio, controllare here (ma io suggerirei di usare un PreparedStatement)

+0

c'è un'istruzione batch in SQL Server o devo usare un api ...? – Kaddy

+0

@Kaddy - Raccomanderei di farlo sul lato Java con un batch utilizzando PreparedStatement – froadie

1

È possibile passare un molto lunga stringa a SQL con più inserimenti come una dichiarazione a SQL Server. Questo non funzionerà se stai facendo query parametriche, però. E le stringhe SQL concatenate sono "Generalmente una cattiva idea".

Potrebbe essere meglio guardare il comando BULK INSERT. Ha il problema di essere rigido sugli ordini di colonne e così via. Ma il suo MODO VELOCE !!

+0

non posso usarlo perché non ho un file ... grazie comunque ... – Kaddy

+0

sì, è un PITA per scrivere il file e così, ma è un buon comando di cui essere consapevole. :) –

Problemi correlati