sql >> Database >  >> RDS >> Mysql

Voorbeeld JDBC-verklaring - Batch invoegen, bijwerken, verwijderen

Als u veel sql-opdrachten voor invoegen of bijwerken moet uitvoeren, kunt u java.sql.Statement addBatch(String sqlCmd) gebruiken methode om ze te groeperen en voer vervolgens java.sql.Statement executeBatch() uit om alle opdrachten tegelijk naar de databaseserver te sturen.

Opmerkingen over  JDBC-batchbewerking

  1. Verbeter de prestaties van de databasecommunicatie omdat sql-opdrachten per groep naar de databaseserver zijn verzonden, dit kan de communicatiekosten tussen client en server verlagen.
  2. Batchbewerking is een functie van de doeldatabaseserver en is niet vereist door het jdbc-stuurprogramma. U kunt Connection.getMetaData().supportsBatchUpdates() gebruiken om te controleren of de doeldatabase batchupdate ondersteunt of niet.
  3. Batchbewerking kan niet alleen worden gebruikt om opdrachten in te voegen, maar ook om opdrachten bij te werken en te verwijderen.
  4. U moet java.sql.Connection.setAutoCommit(false) gebruiken om de automatische vastlegging van de database uit te schakelen voordat batch-db-acties worden uitgevoerd.
  5. Gebruik na het uitvoeren van batchbewerkingen java.sql.Connection.commit() om de bewerkingen in één keer door te voeren naar de databaseserver.
  6. U moet java.sql.Connection.setAutoCommit(true) uitvoeren om automatische vastlegging voor latere db-bewerkingen in te schakelen.
  7. Batched sql kan meerdere tabellen bedienen.

Batch SQL-codefragmenten

	/* 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);

Volledige voorbeeldcodes

Het onderstaande voorbeeld gebruikt een mysql-database, voegt gegevens in en werkt deze bij in tabelleraar en student in batch. U kunt verwijzen naar JDBC gebruiken om MySql-database te verbinden voor meer informatie over 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);
	}

Broncode:

  1. [download id=”2551″]

  1. Help alstublieft de SQL Server-statistieken te verbeteren!

  2. Oracle-datum tussen zoekopdracht

  3. PostgreSQL-ondersteuning inschakelen in PHP op Mac OS X

  4. Binaire gegevens in MySQL