sql >> Databasteknik >  >> RDS >> Mysql

JDBC Statement Exempel – Batch Infoga, Uppdatera, Ta bort

När du har många insert eller update sql-kommandon att köra kan du använda java.sql.Statement addBatch(String sqlCmd) metod för att gruppera dem tillsammans och sedan köra java.sql.Statement executeBatch() för att skicka alla kommandon till databasservern på en gång.

Anteckningar om  JDBC Batch Operation

  1. Förbättra databaskommunikationsprestanda eftersom sql-kommandon skickades till databasserver för grupp, detta kan minska kostnaden för kommunikation mellan klient och server.
  2. Batchoperation är en funktion i måldatabasservern, den krävs inte av jdbc-drivrutinen. Du kan använda Connection.getMetaData().supportsBatchUpdates() för att kontrollera om destinationsdatabasen stöder batchuppdatering eller inte.
  3. Batchoperation kan användas för att inte bara infoga kommandon utan även uppdatera och ta bort kommandon.
  4. Du bör använda java.sql.Connection.setAutoCommit(false) för att inaktivera automatisk commit för databasen innan du utför batch-db-åtgärder.
  5. När du har utfört batchoperationer, använd java.sql.Connection.commit() för att överföra operationerna till databasservern på en gång.
  6. Du bör köra java.sql.Connection.setAutoCommit(true) för att aktivera automatisk commit för senare db-operationer.
  7. Batched sql kan hantera flera tabeller.

Satsvisa SQL-kodavsnitt

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

Komplettera exempelkoder

Nedan exempel kommer att använda mysql-databas, infoga och uppdatera data till tabelllärare och elev i batch. Du kan se Hur man använder JDBC för att ansluta MySql-databas för att lära dig mer 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);
	}

Källkod:

  1. [nedladdnings-id=”2551″]

  1. Hur infogar man en uppdateringsbar post med JSON-kolumn i PostgreSQL med JOOQ?

  2. MariaDB DATABAS() Förklarat

  3. Varför behöver vi GLOB-satsen i SQLite?

  4. SQL Oracle LEFT JOIN och SUBQUERY-fel:ORA-00905:sökord saknas