Heim  >  Artikel  >  Java  >  Wie parametrisiere ich eine IN-Klausel in Java JDBC?

Wie parametrisiere ich eine IN-Klausel in Java JDBC?

Barbara Streisand
Barbara StreisandOriginal
2024-11-01 03:15:02518Durchsuche

How to Parameterize an IN Clause in Java JDBC?

JDBC-Parametrierung in einer IN-Klausel

In Java JDBC erfordert die Parametrisierung der Argumente in einer IN-Klausel etwas mehr Einfallsreichtum im Vergleich zu anderen Programmierungen Sprachen.

Das Problem tritt auf, wenn wir eine Abfrage ausführen müssen wie:

SELECT * FROM MYTABLE WHERE MYCOL IN (?)

Herausforderungen

JDBC bietet keine einfache Möglichkeit um die IN-Klausel zu parametrisieren. Einige JDBC-Treiber unterstützen möglicherweise die Verwendung von PreparedStatement#setArray(), aber diese Unterstützung variiert je nach Datenbank.

Lösung

Um diese Herausforderung zu meistern, können wir Hilfsmethoden zum Erstellen verwenden Platzhalterzeichenfolgen und legen Sie die Parameterwerte in einer Schleife fest.

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

Verwendung

Wir können diese Hilfsmethoden in unserem Code wie folgt verwenden:

<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>

Einschränkungen

Beachten Sie, dass einige Datenbanken, wie z. B. Oracle, möglicherweise eine Grenze für die Anzahl der in einer IN-Klausel zulässigen Werte festlegen.

Das obige ist der detaillierte Inhalt vonWie parametrisiere ich eine IN-Klausel in Java JDBC?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn