Rumah > Java > javaTutorial > Bagaimana untuk Parameterkan Klausa IN dalam Java JDBC?

Bagaimana untuk Parameterkan Klausa IN dalam Java JDBC?

Barbara Streisand
Lepaskan: 2024-11-01 03:15:02
asal
623 orang telah melayarinya

How to Parameterize an IN Clause in Java JDBC?

Parameterisasi JDBC dalam Klausa IN

Dalam Java JDBC, parameterkan argumen dalam klausa IN memerlukan sedikit lebih kepintaran berbanding pengaturcaraan lain bahasa.

Isu timbul apabila kita perlu melaksanakan pertanyaan seperti:

SELECT * FROM MYTABLE WHERE MYCOL IN (?)
Salin selepas log masuk

Cabaran

JDBC tidak menyediakan cara yang mudah untuk parameterkan klausa IN. Sesetengah pemacu JDBC mungkin menyokong menggunakan PreparedStatement#setArray(), tetapi sokongan ini berbeza-beza merentas pangkalan data.

Penyelesaian

Untuk mengatasi cabaran ini, kami boleh menggunakan kaedah pembantu untuk membina rentetan pemegang tempat dan tetapkan nilai parameter dalam gelung.

<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]);
    }
}
Salin selepas log masuk

Penggunaan

Kami boleh menggunakan kaedah pembantu ini dalam kod kami seperti berikut:

<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>
Salin selepas log masuk

Penghadan

Perhatikan bahawa sesetengah pangkalan data, seperti Oracle, mungkin mengenakan had pada bilangan nilai yang dibenarkan dalam klausa IN.

Atas ialah kandungan terperinci Bagaimana untuk Parameterkan Klausa IN dalam Java JDBC?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan