Når du har mange insert eller update sql kommandoer at udføre, kan du bruge java.sql.Statement addBatch(String sqlCmd)
metode til at gruppere dem sammen og derefter køre java.sql.Statement executeBatch()
for at overføre alle kommandoer til databaseserveren på én gang.
Bemærkninger om JDBC Batch Operation
- Forbedre ydeevnen for databasekommunikation, fordi sql-kommandoer blev sendt til databaseserver for gruppe, dette kan reducere omkostningerne ved kommunikation mellem klient og server.
- Batchdrift er en funktion af måldatabaseserveren, den er ikke påkrævet af jdbc-driveren. Du kan bruge
Connection.getMetaData().supportsBatchUpdates()
for at kontrollere, om destinationsdatabasen understøtter batchopdatering eller ej. - Batchoperation kan bruges til ikke kun at indsætte kommando, men også opdatere og slette kommandoer.
- Du skal bruge
java.sql.Connection.setAutoCommit(false)
for at deaktivere databasens automatiske commit før udførelse af batch db-handlinger. - Når du har udført batch-handlinger, skal du bruge
java.sql.Connection.commit()
for at overføre operationerne til databaseserveren på én gang. - Du skal køre
java.sql.Connection.setAutoCommit(true)
for at aktivere automatisk commit til senere db-handlinger. - Batched sql kan betjene flere tabeller.
Batch SQL-kodestykker
/* 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);
Fuldfør eksempelkoder
Nedenstående eksempel vil bruge mysql database, indsætte og opdatere data til tabellærer og elev i batch. Du kan se Sådan bruges JDBC til at forbinde MySql-database for at lære mere om JDBC MySQL.
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); }
Kildekode:
- [download id="2551″]