JDBC - przetwarzanie wsadowe
Przetwarzanie wsadowe umożliwia grupowanie powiązanych instrukcji SQL we wsad i wysyłanie ich jednym wywołaniem do bazy danych.
Wysyłając jednocześnie kilka instrukcji SQL do bazy danych, zmniejszasz obciążenie komunikacyjne, poprawiając w ten sposób wydajność.
Do obsługi tej funkcji nie są wymagane sterowniki JDBC. Należy użyć metody DatabaseMetaData.supportsBatchUpdates () , aby określić, czy docelowa baza danych obsługuje przetwarzanie aktualizacji wsadowych. Metoda zwraca wartość true, jeśli sterownik JDBC obsługuje tę funkcję.
Plik addBatch()Metoda Statement, PreparedStatement i CallableStatement służy do dodawania poszczególnych instrukcji do partii. PlikexecuteBatch() służy do rozpoczęcia wykonywania wszystkich zgrupowanych instrukcji.
Plik executeBatch() zwraca tablicę liczb całkowitych, a każdy element tablicy reprezentuje liczbę aktualizacji dla odpowiedniej instrukcji update.
Tak jak możesz dodać instrukcje do partii w celu przetworzenia, możesz je usunąć za pomocą clearBatch()metoda. Ta metoda usuwa wszystkie instrukcje dodane za pomocą metody addBatch (). Nie możesz jednak wybiórczo wybrać, które oświadczenie chcesz usunąć.
Batching z obiektem instrukcji
Oto typowa sekwencja kroków, aby użyć przetwarzania wsadowego z obiektem instrukcji -
Utwórz obiekt instrukcji za pomocą jednej z metod createStatement () .
Ustaw auto-commit na false używając setAutoCommit () .
Dodaj dowolną liczbę instrukcji SQL do partii za pomocą metody addBatch () na utworzonym obiekcie instrukcji.
Wykonaj wszystkie instrukcje SQL za pomocą metody executeBatch () na utworzonym obiekcie instrukcji.
Na koniec zatwierdź wszystkie zmiany za pomocą metody commit () .
Przykład
Poniższy fragment kodu przedstawia przykład aktualizacji partii przy użyciu obiektu instrukcji -
// Create statement object
Statement stmt = conn.createStatement();
// Set auto-commit to false
conn.setAutoCommit(false);
// Create SQL statement
String SQL = "INSERT INTO Employees (id, first, last, age) " +
"VALUES(200,'Zia', 'Ali', 30)";
// Add above SQL statement in the batch.
stmt.addBatch(SQL);
// Create one more SQL statement
String SQL = "INSERT INTO Employees (id, first, last, age) " +
"VALUES(201,'Raj', 'Kumar', 35)";
// Add above SQL statement in the batch.
stmt.addBatch(SQL);
// Create one more SQL statement
String SQL = "UPDATE Employees SET age = 35 " +
"WHERE id = 100";
// Add above SQL statement in the batch.
stmt.addBatch(SQL);
// Create an int[] to hold returned values
int[] count = stmt.executeBatch();
//Explicitly commit statements to apply changes
conn.commit();
Aby lepiej zrozumieć, przeanalizujmy Batching - przykładowy kod .
Batching z obiektem PrepareStatement
Oto typowa sekwencja kroków korzystania z przetwarzania wsadowego z obiektem PrepareStatement -
Utwórz instrukcje SQL z symbolami zastępczymi.
Utwórz obiekt PrepareStatement za pomocą jednej z metod readyStatement () .
Ustaw auto-commit na false używając setAutoCommit () .
Dodaj dowolną liczbę instrukcji SQL do partii za pomocą metody addBatch () na utworzonym obiekcie instrukcji.
Wykonaj wszystkie instrukcje SQL za pomocą metody executeBatch () na utworzonym obiekcie instrukcji.
Na koniec zatwierdź wszystkie zmiany za pomocą metody commit () .
Poniższy fragment kodu przedstawia przykład aktualizacji wsadowej przy użyciu obiektu PrepareStatement -
// Create SQL statement
String SQL = "INSERT INTO Employees (id, first, last, age) " +
"VALUES(?, ?, ?, ?)";
// Create PrepareStatement object
PreparedStatemen pstmt = conn.prepareStatement(SQL);
//Set auto-commit to false
conn.setAutoCommit(false);
// Set the variables
pstmt.setInt( 1, 400 );
pstmt.setString( 2, "Pappu" );
pstmt.setString( 3, "Singh" );
pstmt.setInt( 4, 33 );
// Add it to the batch
pstmt.addBatch();
// Set the variables
pstmt.setInt( 1, 401 );
pstmt.setString( 2, "Pawan" );
pstmt.setString( 3, "Singh" );
pstmt.setInt( 4, 31 );
// Add it to the batch
pstmt.addBatch();
//add more batches
.
.
.
.
//Create an int[] to hold returned values
int[] count = stmt.executeBatch();
//Explicitly commit statements to apply changes
conn.commit();
Aby lepiej zrozumieć, przeanalizujmy Batching - przykładowy kod .