>  기사  >  Java  >  각 SQL 작업에 대해 새 ReadyStatements를 생성해야 합니까, 아니면 동일한 것을 재사용해야 합니까?

각 SQL 작업에 대해 새 ReadyStatements를 생성해야 합니까, 아니면 동일한 것을 재사용해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-31 22:42:02305검색

 Should I create new PreparedStatements for each SQL operation or reuse the same one?

PreparedStatement를 여러 작업에 재사용

연결 풀 없이 단일 연결을 활용하는 시나리오에서 다음과 같은 접근 방식에 대한 질문이 있습니다. ReadyStatements 생성 및 사용 한 가지 옵션은 각 SQL/DML 작업에 대해 새 ReadyStatement 인스턴스를 생성하는 것입니다.

<code class="java">for (int i=0; i<1000; i++) {
    PreparedStatement preparedStatement = connection.prepareStatement(sql);
    preparedStatement.setObject(1, someValue);
    preparedStatement.executeQuery();
    preparedStatement.close();
}

또는 해당 매개변수를 지우고 값을 재설정하여 동일한 ReadyStatement 인스턴스를 재사용할 수 있습니다.

<code class="java">PreparedStatement preparedStatement = connection.prepareStatement(sql);
for (int i=0; i<1000; i++) {
    preparedStatement.clearParameters();
    preparedStatement.setObject(1, someValue);
    preparedStatement.executeQuery();
}
preparedStatement.close();

권장 사항 및 멀티스레드 고려 사항

최적의 효율성을 위해 준비된 명령문 작업을 일괄적으로 실행하는 것이 좋습니다.

<code class="java">public void executeBatch(List<Entity> entities) throws SQLException { 
    try (
        Connection connection = dataSource.getConnection();
        PreparedStatement statement = connection.prepareStatement(SQL);
    ) {
        for (Entity entity : entities) {
            statement.setObject(1, entity.getSomeProperty());
            // ...
            statement.addBatch();
        }

        statement.executeBatch();
    }
}</code>

멀티스레드 환경에서 작업할 때 동일한 메서드 블록 내에서 가능한 가장 짧은 범위 내에서 연결과 문을 닫습니다. try-with-resources를 사용하는 JDBC 관용구를 따르면 리소스 관리가 적절하게 처리됩니다.

트랜잭션 배치의 경우 연결 시 자동 커밋을 비활성화하고 잠재적인 데이터베이스 불일치를 방지하려면 모든 배치가 성공적으로 완료된 후에만 커밋하세요.

위 내용은 각 SQL 작업에 대해 새 ReadyStatements를 생성해야 합니까, 아니면 동일한 것을 재사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.