Wenn Sie viele Einfüge- oder Aktualisierungs-SQL-Befehle ausführen müssen, können Sie java.sql.Statement addBatch(String sqlCmd)
verwenden Methode, um sie zu gruppieren und dann java.sql.Statement executeBatch()
auszuführen um alle Befehle auf einmal an den Datenbankserver zu übergeben.
Hinweise zum JDBC-Batch-Vorgang
- Verbessern Sie die Leistung der Datenbankkommunikation, da SQL-Befehle gruppenweise an den Datenbankserver gesendet wurden. Dadurch können die Kommunikationskosten zwischen Client und Server gesenkt werden.
- Batch-Operation ist eine Funktion des Zieldatenbankservers, sie wird vom jdbc-Treiber nicht benötigt. Sie können
Connection.getMetaData().supportsBatchUpdates()
verwenden um zu prüfen, ob die Zieldatenbank Batch-Updates unterstützt oder nicht. - Batch-Operation kann nicht nur zum Einfügen von Befehlen, sondern auch zum Aktualisieren und Löschen von Befehlen verwendet werden.
- Sie sollten
java.sql.Connection.setAutoCommit(false)
verwenden um die automatische Festschreibung der Datenbank zu deaktivieren, bevor Batch-Datenbankaktionen ausgeführt werden. - Verwenden Sie nach der Ausführung von Stapelvorgängen
java.sql.Connection.commit()
um die Operationen sofort an den Datenbankserver zu übergeben. - Sie sollten
java.sql.Connection.setAutoCommit(true)
ausführen Auto-Commit für spätere DB-Operationen zu aktivieren. - Batch-SQL kann mehrere Tabellen verarbeiten.
Batch-SQL-Code-Snippets
/* Get connection object. */ Connection dbConn = this.getMySqlConnection(ip, port, dbName, userName, password); /* Disable auto commit. */ dbConn.setAutoCommit(false); /* Get statement object. */ Statement stmt = dbConn.createStatement(); /* Add sql in batch, each sql can operate different table. */ stmt.addBatch(sql1); stmt.addBatch(sql2); stmt.addBatch(sql3); stmt.addBatch(sql4); stmt.addBatch(sql5); stmt.addBatch(sql6); /* Execute batch sql to db server. */ int updateCountArr[] = stmt.executeBatch(); /* Do not forget commit. */ dbConn.commit(); /* Enable auto commit for later db operation. */ dbConn.setAutoCommit(true);
Vollständige Beispielcodes
Im folgenden Beispiel wird die MySQL-Datenbank verwendet, Daten eingefügt und aktualisiert, um Lehrer und Schüler im Stapelbetrieb zu Tabellen. Weitere Informationen zu JDBC MySQL finden Sie unter How To Use JDBC To Connect MySql Database.
public void testBatchUpdate(String ip, int port, String dbName, String userName, String password) { String sqlArr[] = new String[6]; sqlArr[0] = "insert into student values('richard','[email protected]')"; sqlArr[1] = "insert into student values('jerry','[email protected]')"; sqlArr[2] = "insert into teacher(name, email) values('tom','[email protected]')"; sqlArr[3] = "update teacher set email = '[email protected]' where name = 'hello'"; sqlArr[4] = "insert into teacher(name, email) values('song','[email protected]')"; sqlArr[5] = "insert into teacher(name, email) values('jerry','[email protected]')"; this.executeBatchSql(ip, port, dbName, userName, password, sqlArr); } /* Batch execute insert, update, delete commands. */ public void executeBatchSql(String ip, int port, String dbName, String userName, String password, String sqlArr[]) { /* Declare the connection and statement object. */ Connection dbConn = null; Statement stmt = null; try { /* Get connection object. */ dbConn = this.getMySqlConnection(ip, port, dbName, userName, password); /* Check whether this db support batch update or not. */ boolean supportBatch = dbConn.getMetaData().supportsBatchUpdates(); if(supportBatch) { System.out.println("This database support batch update."); }else { System.out.println("This database do not support batch update."); } /* Disable auto commit. */ dbConn.setAutoCommit(false); /* Get statement object. */ stmt = dbConn.createStatement(); if(sqlArr!=null) { int len = sqlArr.length; for(int i=0;i<len;i++) { String sql = sqlArr[i]; stmt.addBatch(sql); System.out.println("Batch add sql : " + sql); } if(len > 0) { /* The return array save each command updated rows number. */ int updateCountArr[] = stmt.executeBatch(); dbConn.commit(); dbConn.setAutoCommit(true); System.out.println("Execute batch sql successfully. "); int updateLength = updateCountArr.length; for(int j=0 ; j < updateLength; j++) { int updateCount = updateCountArr[j]; System.out.println("updateCount : " + updateCount); } } } }catch(Exception ex) { ex.printStackTrace(); }finally { this.closeDBResource(stmt, dbConn); } } public static void main(String[] args) { /* Below are db connection required data. */ String ip = "localhost"; int port = 3306; String dbName = "test"; String userName = "root"; String password = ""; /* Create an instance. */ JDBCStatementExample jdbcStatementExample = new JDBCStatementExample(); jdbcStatementExample.testBatchUpdate(ip, port, dbName, userName, password); }
Quellcode:
- [Download-ID=”2551″]