sql >> Base de Datos >  >> RDS >> Mysql

Ejemplo de declaración JDBC:inserción, actualización y eliminación por lotes

Cuando tenga que ejecutar muchos comandos SQL de inserción o actualización, puede usar java.sql.Statement addBatch(String sqlCmd) método para agruparlos y luego ejecutar java.sql.Statement executeBatch() para enviar todos los comandos al servidor de la base de datos a la vez.

Notas de la operación por lotes de JDBC

  1. Mejore el rendimiento de la comunicación de la base de datos porque los comandos sql se enviaron al servidor de la base de datos por grupo, esto puede reducir el costo de la comunicación entre el cliente y el servidor.
  2. La operación por lotes es una función del servidor de la base de datos de destino, no es necesaria para el controlador jdbc. Puede usar Connection.getMetaData().supportsBatchUpdates() para comprobar si la base de datos de destino admite la actualización por lotes o no.
  3. La operación por lotes se puede utilizar no solo para insertar comandos, sino también para actualizar y eliminar comandos.
  4. Debe usar java.sql.Connection.setAutoCommit(false) para deshabilitar la confirmación automática de la base de datos antes de ejecutar acciones de base de datos por lotes.
  5. Después de ejecutar operaciones por lotes, use java.sql.Connection.commit() para enviar las operaciones al servidor de la base de datos a la vez.
  6. Debe ejecutar java.sql.Connection.setAutoCommit(true) para habilitar la confirmación automática para operaciones de base de datos posteriores.
  7. Batched sql puede operar varias tablas.

Fragmentos de código SQL por lotes

	/* 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 ejemplo completos

El siguiente ejemplo usará la base de datos mysql, insertará y actualizará los datos para mostrar al maestro y al estudiante por lotes. Puede consultar Cómo usar JDBC para conectar la base de datos MySql para obtener más información sobre 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 fuente:

  1. [ID de descarga=”2551″]