Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Przykład instrukcji JDBC — wstawianie, aktualizacja, usuwanie wsadowe

Jeśli masz dużo poleceń wstawiania lub aktualizowania sql do wykonania, możesz użyć java.sql.Statement addBatch(String sqlCmd) metodę, aby je zgrupować, a następnie uruchomić java.sql.Statement executeBatch() aby zatwierdzić wszystkie polecenia na serwerze bazy danych na raz.

Uwagi dotyczące operacji wsadowych JDBC

  1. Zwiększ wydajność komunikacji z bazą danych, ponieważ polecenia sql były wysyłane do serwera bazy danych przez grupę, co może zmniejszyć koszt komunikacji między klientem a serwerem.
  2. Operacja wsadowa jest cechą docelowego serwera bazy danych, nie jest wymagana przez sterownik jdbc. Możesz użyć Connection.getMetaData().supportsBatchUpdates() aby sprawdzić, czy docelowa baza danych obsługuje aktualizację wsadową, czy nie.
  3. Operacja wsadowa może być używana nie tylko do wstawiania poleceń, ale także do aktualizacji i usuwania poleceń.
  4. Powinieneś użyć java.sql.Connection.setAutoCommit(false) aby wyłączyć automatyczne zatwierdzanie bazy danych przed wykonaniem wsadowych działań bazy danych.
  5. Po wykonaniu operacji wsadowych użyj java.sql.Connection.commit() aby natychmiast zatwierdzić operacje na serwerze bazy danych.
  6. Powinieneś uruchomić java.sql.Connection.setAutoCommit(true) aby włączyć automatyczne zatwierdzanie dla późniejszych operacji bazy danych.
  7. Wsadowy sql może obsługiwać wiele tabel.

Wsadowe fragmenty kodu SQL

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

Pełne kody przykładowe

Poniższy przykład użyje bazy mysql, wstawi i zaktualizuje dane do tabeli nauczyciela i ucznia w partii. Aby dowiedzieć się więcej o JDBC MySQL, zapoznaj się z artykułem Jak używać JDBC do połączenia z bazą danych 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);
	}

Kod źródłowy:

  1. [pobierz identyfikator =”2551″]

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MAX() – Znajdź maksymalną wartość w kolumnie w MySQL

  2. Zapytanie o długość i szerokość geograficzną mySQL dla innych wierszy w promieniu x mili

  3. Błąd zapytania SQL MySQL w WordPressie w klasie WPDB

  4. Zachowanie MySQL GROUP BY

  5. Znaki zapytania MySQL db zamiast znaków hebrajskich..?