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)を使用する必要があります バッチデータベースアクションを実行する前にデータベースの自動コミットを無効にします。
    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. [download id =” 2551”]

    1. CentOS /RHEL7およびDebianシステムでMariaDB5.5をMariaDB10.1にアップグレードする方法

    2. 配列をSQLServerストアドプロシージャに渡す

    3. SQL Server(T-SQL)で高度なサーバー構成オプションを表示する

    4. 問題セット1-エンティティの特定