Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Aby se zlepšil výkon při výskytu více aktualizací databáze SQL Serveru, ovladač Microsoft JDBC pro SQL Server umožňuje odesílat více aktualizací jako jednu jednotku práce, označovanou také jako dávka.
Třídy SQLServerStatement, SQLServerPreparedStatement a SQLServerCallableStatement lze použít k odesílání dávkových aktualizací. AddBatch metoda se používá k přidání příkazu. ClearBatch metoda slouží k vymazání seznamu příkazů. Metoda executeBatch se používá k odeslání všech příkazů ke zpracování. Příkazy jazyka pro definici dat (DDL) a jazyka pro manipulaci s daty (DML), které vracejí jednoduchý počet aktualizací provedených operací, lze spustit pouze jako součást dávky.
Metoda executeBatch vrátí pole int hodnot, které odpovídají aktualizačnímu počtu jednotlivých příkazů. Pokud některý z příkazů selže, vyvolá se výjimka BatchUpdateException a měli byste použít metodu getUpdateCounts třídy BatchUpdateException k načtení pole počtu aktualizací. Pokud příkaz selže, ovladač bude dál zpracovávat zbývající příkazy. Pokud má však příkaz chybu syntaxe, příkazy v dávce selžou.
Poznámka:
Pokud nepotřebujete používat počty aktualizací, můžete nejprve vydat příkaz SET NOCOUNT ON na SQL Server. Tím se sníží síťový provoz a navíc se zvýší výkon vaší aplikace.
V ukázkové databázi AdventureWorks2025 vytvořte například následující tabulku:
CREATE TABLE TestTable
(Col1 int IDENTITY,
Col2 varchar(50),
Col3 int);
V následujícím příkladu se do funkce předá otevřené připojení k ukázkové databázi AdventureWorks2025, metoda addBatch slouží k vytvoření příkazů, které se mají provést, a metoda executeBatch je volána k odeslání dávky do databáze.
public static void executeBatchUpdate(Connection con) {
try {
Statement stmt = con.createStatement();
stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('X', 100)");
stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('Y', 200)");
stmt.addBatch("INSERT INTO TestTable (Col2, Col3) VALUES ('Z', 300)");
int[] updateCounts = stmt.executeBatch();
stmt.close();
}
catch (Exception e) {
e.printStackTrace();
}
}