How to use IN clause with PreparedStatement in PostgreSQL

后端 未结 3 800
北恋
北恋 2020-12-18 22:49

I have to write a SQL query for Postgres database as follows:

DELETE FROM employee WHERE ename IN (?)

I want to pass ename as

3条回答
  •  情书的邮戳
    2020-12-18 23:42

    There are several ways to do this. The clean way is to pass an array to the prepared statement. An alternative to Nick's answer is to pass a proper java.sql.Array value:

    PreparedStatement pstmt = connection.prepareStatement(
        "DELETE FROM employee WHERE ename = ANY (?)");
    String[] idList = new String[] {"abc", "bcd", "efg"};
    Array ids = connection.createArray("varchar", idList);
    pstmt.setArray(1, ids);
    

    Another option is to use Postgres' string functions to convert the comma separated list to an array. That is probably the easiest way:

    PreparedStatement pstmt = connection.prepareStatement(
         "DELETE FROM employee WHERE ename = ANY (string_to_array(?, ','))");
    psmt.setString(1, "abc,bcd,efg");
    

    Note that you must not have spaces between the comma and the value! Those spaces will be part of the value that is stored in the array after string_to_array() has done it's job so comparison would e.g. be ename = ' bcd' which would fail if there is no leading space in the column ename(which is highly likely)

提交回复
热议问题