IN 절의 JDBC 매개변수화
Java JDBC에서 IN 절의 인수를 매개변수화하려면 다른 프로그래밍에 비해 약간 더 독창성이 필요합니다.
다음과 같은 쿼리를 실행해야 할 때 문제가 발생합니다.
SELECT * FROM MYTABLE WHERE MYCOL IN (?)
도전
JDBC는 간단한 방법을 제공하지 않습니다. IN 절을 매개변수화합니다. 일부 JDBC 드라이버는 preparedStatement#setArray() 사용을 지원할 수 있지만 이 지원은 데이터베이스에 따라 다릅니다.
솔루션
이 문제를 극복하기 위해 도우미 메서드를 사용하여 구성할 수 있습니다. 자리 표시자 문자열을 사용하고 루프에서 매개변수 값을 설정합니다.
<code class="java">public static String preparePlaceHolders(int length) { return String.join(",", Collections.nCopies(length, "?")); } public static void setValues(PreparedStatement preparedStatement, Object... values) throws SQLException { for (int i = 0; i < values.length; i++) { preparedStatement.setObject(i + 1, values[i]); } }
사용법
다음과 같이 코드에서 이러한 도우미 메서드를 활용할 수 있습니다.
<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>
제한
Oracle과 같은 일부 데이터베이스에서는 IN 절에 허용되는 값 수에 제한을 둘 수 있습니다.
위 내용은 Java JDBC에서 IN 절을 매개변수화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!