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 중국어 웹사이트의 기타 관련 기사를 참조하세요!