>데이터 베이스 >MySQL 튜토리얼 >JDBC를 사용하여 IN 절을 효과적으로 매개변수화하려면 어떻게 해야 합니까?

JDBC를 사용하여 IN 절을 효과적으로 매개변수화하려면 어떻게 해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-15 08:02:44551검색

JDBC 매개변수 IN 절의 효율적인 사용

SQL 쿼리에서 IN 절은 지정된 컬렉션과 값을 일치시키는 데 사용됩니다. Java 및 JDBC를 사용할 때 IN 절의 매개변수를 매개변수화하는 것은 보안 및 성능에 매우 중요합니다.

직접 매개변수화 방법이 있나요?

안타깝게도 JDBC에서는 IN 절의 값을 직접 매개변수화하는 방법을 제공하지 않습니다. 그러나 일부 JDBC 드라이버는 preparedStatement#setArray()를 지원할 수 있습니다.

종합 솔루션

이 문제를 해결하려면 자리 표시자를 생성하고 루프에서 값을 설정하는 도우미 메서드를 만들 수 있습니다. 작동 방식은 다음과 같습니다.

  1. preparePlaceHolders(length): Collections#nCopies() 및 String#join()을 사용하여 쉼표로 구분된 자리 표시자 문자열을 생성합니다(예: 세 개의 값을 포함하는 IN 절의 경우). ?,?,?".
  2. setValues(preparedStatement,values):PreparedStatement#setObject()를 사용하여 값 배열의 각 값을 준비된 문으로 설정하고 매개변수를 IN 절에 효과적으로 할당합니다.

사용 예:

<code class="language-java">import java.util.*;
import java.sql.*;

private static final String SQL_FIND = "SELECT id, name, value FROM entity WHERE id IN (%s)";

public List<Entity> find(Set<Long> ids) throws SQLException {
    List<Entity> entities = new ArrayList<>();
    String sql = String.format(SQL_FIND, preparePlaceHolders(ids.size()));

    try (
        Connection connection = dataSource.getConnection();
        PreparedStatement statement = connection.prepareStatement(sql);
    ) {
        setValues(statement, ids.toArray());

        // 执行查询...
    }
    return entities;
}</code>

참고: 일부 데이터베이스에는 IN 절에 허용되는 값 개수에 제한이 있습니다. 예를 들어 Oracle은 이를 1000개 항목으로 제한합니다.

How Can I Parameterize an IN Clause Effectively with JDBC?

위 내용은 JDBC를 사용하여 IN 절을 효과적으로 매개변수화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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