Java executeBatch()

2023. 2. 20. 10:40Java

프로젝트 내 src 내 javabasic 패키지 내 DoBatch.java

package javabasic;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class DoBatch {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Connection conn = null;
		PreparedStatement pst = null;

		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "a1234");

			String query = "insert into batch values(?,?,?,?,?)";
			pst = conn.prepareStatement(query);

			long startTime = System.currentTimeMillis();
			for (int i = 0; i < 10000; i++) {
				pst.setString(1, "col1");
				pst.setString(2, "col2");
				pst.setString(3, "col3");
				pst.setString(4, "col4");
				pst.setString(5, "col5");
				pst.addBatch();// batch를 사용하는것이 바람직
			}
			pst.executeBatch();
			long endTime = System.currentTimeMillis();

			System.out.println("데이터 입력 소요시간: " + (endTime - startTime) + "ms");

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (pst != null)
				try {
					pst.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}

	}

}

윈도우 cmd.exe 창에서 sqlplus 에 접속하여 SELECT * FROM batch; 하면

정보를 끌어오는데 무지하게 오래 걸리고 29000 개의 행이 선택되었습니다. 라고 마지막 정보가 나온다.

너무 오랜 시간이 걸려서 테이블 내 전체 내용을 삭제한다.

SQL> DELETE FROM batch;

하면 29000 행이 삭제되었습니다. 라고 나온다.

 

위의 코드를 실행한다.

실행 결과

데이터 입력 소요시간: 100ms

cmd.exe 에서 sqlplus 를 실행한 프롬프트에서 다음과 같이 쓴다.

SQL> select count(*) from batch;

  COUNT(*)
----------
     10000

 

void java.sql.PreparedStatement.addBatch() throws SQLException

addBatch() 메서드는 요 PreparedStatement 객체의 명령문들의 한 묶음에 다가 한세트의 파라메터들(인수들) 을 추가한다.

 

 

 

int[] java.sql.Statement.executeBatch() throws SQLException

executeBatch() 메서드는

데이타베이스에 실행하기 위한 명령문들 한 묶음을 제출하고, 그리고 만약에 모든 명령문들을 성공적으로 실행한다면, 새롭게만든(업데이트한) 횟수들이 담긴 배열 한개를 반환한다. 

 

'Java' 카테고리의 다른 글

Java setNull(int parameterIndex, int sqlType)  (0) 2023.02.20
Java getBufferSize()  (0) 2023.02.20
Java setDriverClassName(String driverClassName)  (0) 2023.02.20
Java getTime(int columnIndex)  (0) 2023.02.20
Java LocalDateTime  (0) 2023.02.19