Home > Java > javaTutorial > body text

How to Parameterize an IN Clause in Java JDBC?

Barbara Streisand
Release: 2024-11-01 03:15:02
Original
603 people have browsed it

How to Parameterize an IN Clause in Java JDBC?

JDBC Parameterization in an IN Clause

In Java JDBC, parameterizing the arguments in an IN clause requires a bit more ingenuity compared to other programming languages.

The issue arises when we need to execute a query like:

SELECT * FROM MYTABLE WHERE MYCOL IN (?)
Copy after login

Challenges

JDBC doesn't provide a straightforward way to parameterize the IN clause. Some JDBC drivers may support using PreparedStatement#setArray(), but this support varies across databases.

Solution

To overcome this challenge, we can use helper methods to construct placeholder strings and set the parameter values in a loop.

<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]);
    }
}
Copy after login

Usage

We can utilize these helper methods in our code as follows:

<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>
Copy after login

Limitations

Note that some databases, like Oracle, may impose a limit on the number of values allowed in an IN clause.

The above is the detailed content of How to Parameterize an IN Clause in Java JDBC?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template