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!