>  기사  >  Java  >  JDBC에서 IN 절을 효과적으로 매개변수화하려면 어떻게 해야 합니까?

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

DDD
DDD원래의
2024-10-31 12:05:31977검색

How can I parameterize an IN clause in JDBC effectively?

JDBC IN 절 매개변수화: 효율적인 접근 방식

SELECT * FROM MYTABLE WHERE MYCOL in( ?), 인수를 매개변수화하면 보안과 효율성이 보장됩니다. JDBC는 직접적인 솔루션을 제공하지 않지만 특정 드라이버는 preparedStatement#setArray()를 지원할 수 있습니다.

매개변수화를 위한 도우미 메서드

직접 지원이 없는 경우 도우미 메서드를 활용하여 IN 절에 대한 자리 표시자를 생성하고 값을 동적으로 설정할 수 있습니다.

  • preparePlaceHolders(int length): 지정된 길이의 자리 표시자의 쉼표로 구분된 목록을 생성합니다.
  • setValues(PreparedStatement prepareStatement, Object...values): preparedStatement#setObject()를 사용하여 루프에 값을 설정합니다.

구현 예

다음 데이터 액세스 방법을 고려하십시오.

<code class="java">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());

        try (ResultSet resultSet = statement.executeQuery()) {
            while (resultSet.next()) {
                entities.add(map(resultSet));
            }
        }
    }

    return entities;
}</code>

주요 고려 사항

  • 데이터베이스는 허용되는 값의 수를 제한할 수 있습니다. IN 절.
  • 이 접근 방식은 값 설정에서 SQL 문 생성을 분리하여 다양한 데이터베이스 간의 이식성을 보장합니다.

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

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