Mysql
 sql >> база данни >  >> RDS >> Mysql

Пример за JDBC изявление – пакетно вмъкване, актуализиране, изтриване

Когато имате много команди за вмъкване или актуализиране на sql за изпълнение, можете да използвате java.sql.Statement addBatch(String sqlCmd) метод, за да ги групирате заедно и след това изпълнете java.sql.Statement executeBatch() за да зададете всички команди на сървъра на базата данни наведнъж.

Бележки за  JDBC пакетна операция

  1. Подобрете ефективността на комуникацията с базата данни, тъй като sql командите се изпращат до сървъра на базата данни по група, това може да намали разходите за комуникация между клиент и сървър.
  2. Пакетната работа е характеристика на целевия сървър на база данни, не се изисква от jdbc драйвер. Можете да използвате Connection.getMetaData().supportsBatchUpdates() за да проверите дали целевата база данни поддържа пакетна актуализация или не.
  3. Пакетната операция може да се използва не само за вмъкване на команда, но и за актуализиране и изтриване на команди.
  4. Трябва да използвате java.sql.Connection.setAutoCommit(false) за да деактивирате автоматичното записване на база данни, преди да изпълните пакетни db действия.
  5. След като изпълните групови операции, използвайте java.sql.Connection.commit() за да зададете операциите на сървъра на базата данни наведнъж.
  6. Трябва да стартирате java.sql.Connection.setAutoCommit(true) за да активирате автоматичното записване за по-късни db операции.
  7. Пакетният sql може да работи с множество таблици.

Пакетни 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);

Пълни примерни кодове

Примерът по-долу ще използва база данни на mysql, ще вмъква и актуализира данни в таблицата учител и ученик в пакет. Можете да се обърнете към Как да използвате JDBC за свързване на MySql база данни за да научите повече за 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);
	}

Изходен код:

  1. [id за изтегляне=”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. Как да настроите локала за текущата връзка в MySQL

  2. MySQL, актуализирайте множество таблици с една заявка

  3. Разлика между тези два подхода за свързване на маса?

  4. Поръчайте MySQL таблица по две колони

  5. Може ли външен ключ да препраща към неуникален индекс?