How to use IN clause with PreparedStatement in PostgreSQL

后端 未结 3 764
北恋
北恋 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:40

    You might want to try the below:

    DELETE FROM employee 
     WHERE ename IN ('abc', 'bcd', 'efg')
    
    0 讨论(0)
  • 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)

    0 讨论(0)
  • 2020-12-18 23:51

    Like this:

    DELETE FROM employee WHERE ename = ANY(?)
    

    The parameter should be formatted as an array literal, e.g. "{abc,bcd,efg}".

    0 讨论(0)
提交回复
热议问题