sql >> Databáze >  >> RDS >> Mysql

Příklad příkazu JDBC – dávkové vložení, aktualizace, vymazání

Pokud potřebujete provést mnoho příkazů vložení nebo aktualizace sql, můžete použít java.sql.Statement addBatch(String sqlCmd) metodu k jejich seskupení a poté spusťte java.sql.Statement executeBatch() pro odevzdání všech příkazů na databázový server najednou.

Poznámky k dávkovému provozu JDBC

  1. Zlepšete výkon databázové komunikace, protože příkazy SQL byly odesílány na databázový server po skupinách, což může snížit náklady na komunikaci mezi klientem a serverem.
  2. Dávkový provoz je funkcí cílového databázového serveru, ovladač jdbc jej nevyžaduje. Můžete použít Connection.getMetaData().supportsBatchUpdates() zkontrolovat, zda cílová databáze podporuje dávkovou aktualizaci nebo ne.
  3. Dávkové operace lze použít nejen k vkládání příkazů, ale také k aktualizaci a odstraňování příkazů.
  4. Měli byste použít java.sql.Connection.setAutoCommit(false) zakázat automatické potvrzení databáze před provedením dávkových akcí db.
  5. Po provedení dávkových operací použijte java.sql.Connection.commit() k odeslání operací na databázový server najednou.
  6. Měli byste spustit java.sql.Connection.setAutoCommit(true) pro povolení automatického potvrzení pro pozdější operace db.
  7. Dávkové sql může pracovat s více tabulkami.

Dávkové úryvky kódu 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);

Úplné ukázkové kódy

Níže uvedený příklad použije databázi mysql, vloží a aktualizuje data do tabulky učitel a student v dávce. Další informace o JDBC MySQL naleznete v části Jak používat JDBC k připojení databáze 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);
	}

Zdrojový kód:

  1. [ID stažení=”2551″]

  1. Řádek SQL oddělený čárkami s klauzulí Seskupit podle

  2. Problém s dotazem na vložení ve Sqlite ? (proměnná vložení)

  3. Jak změnit symbol měny relace v Oracle

  4. Instalace a konfigurace protokolu SQL Serveru a obnovení po havárii -1