Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Exemplo de Instrução JDBC – Inserção, Atualização, Exclusão em Lote


Quando você tem muitos comandos sql de inserção ou atualização para executar, você pode usar java.sql.Statement addBatch(String sqlCmd) para agrupá-los e, em seguida, execute java.sql.Statement executeBatch() para submeter todos os comandos ao servidor de banco de dados de uma só vez.



Notas da  operação em lote JDBC
  1. Melhore o desempenho da comunicação do banco de dados porque os comandos sql foram enviados ao servidor do banco de dados por grupo, isso pode reduzir o custo da comunicação entre cliente e servidor.
  2. A operação em lote é um recurso do servidor de banco de dados de destino, não é exigido pelo driver jdbc. Você pode usar Connection.getMetaData().supportsBatchUpdates() para verificar se o banco de dados de destino suporta atualização em lote ou não.
  3. A operação em lote pode ser usada não apenas para inserir comandos, mas também para atualizar e excluir comandos.
  4. Você deve usar java.sql.Connection.setAutoCommit(false) para desabilitar a confirmação automática do banco de dados antes de executar ações de banco de dados em lote.
  5. Depois de executar as operações em lote, use java.sql.Connection.commit() para confirmar as operações no servidor de banco de dados de uma só vez.
  6. Você deve executar java.sql.Connection.setAutoCommit(true) para habilitar a confirmação automática para operações de banco de dados posteriores.
  7. O sql em lote pode operar várias tabelas.

Fragmentos de código SQL em lote
	/* 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);

Códigos de exemplo completos

O exemplo abaixo usará o banco de dados mysql, inserirá e atualizará dados para tabela professor e aluno em lote. Você pode consultar Como usar o JDBC para conectar o banco de dados MySQL para saber mais sobre o 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);
	}

Código fonte:
  1. [código de download=”2551″]