でのPreparedStatementで句で使用する方法:次のように私はPostgresデータベースのためのSQLクエリを記述する必要がPostgreSQLの
DELETE FROM employee WHERE ename IN (?)
は、私は、例えば、複数の従業員の名前が含まれていますリストや文字列、などename
を渡したいです"abc, bcd, efg"
。値の設定方法は?
IN
句をPreparedStatement
と一緒にPostgresに使用するには?
でのPreparedStatementで句で使用する方法:次のように私はPostgresデータベースのためのSQLクエリを記述する必要がPostgreSQLの
DELETE FROM employee WHERE ename IN (?)
は、私は、例えば、複数の従業員の名前が含まれていますリストや文字列、などename
を渡したいです"abc, bcd, efg"
。値の設定方法は?
IN
句をPreparedStatement
と一緒にPostgresに使用するには?
あなたは以下しようとする場合があります:このように
DELETE FROM employee
WHERE ename IN ('abc', 'bcd', 'efg')
私はPreparedStatementを使用していますが、削除する必要のあるレコードの数はわかりません。それは動的に来るでしょう。だから、どのように場所の所有者を使用するか、または1つのプレースホルダだけでできたら、リストや文字列として値を設定する方法??? – Ritesh
:
DELETE FROM employee WHERE ename = ANY(?)
パラメータがarray literal、例えばとしてフォーマットする必要があります"{abc,bcd,efg}"
。
これを行うにはいくつかの方法があります。きれいな方法は、準備されたステートメントに配列を渡すことです。ニックの答えの代わりに適切なjava.sql.Array
値渡しすることです:
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);
別のオプションは、アレイへのカンマ区切りのリストを変換するために、Postgresの文字列関数を使用することです。あなたはカンマと値の間にスペースを持っていなければなりません
PreparedStatement pstmt = connection.prepareStatement(
"DELETE FROM employee WHERE ename = ANY (string_to_array(?, ','))");
psmt.setString(1, "abc,bcd,efg");
注:それはおそらく最も簡単な方法です!これらのスペースは、string_to_array()
がジョブを完了した後に配列に格納された値の一部になります。 ename = ' bcd'
となります。ename
の列に先頭の空白がないと失敗します(これはおそらくそうです)
Post句でPreparedStatementを使用してIN節を使用する方法はありますか? – Ritesh
代わりに、 'ename = any(<配列パラメータまたは定数>)'を使用してください。面白いですが、PostgreSQLは 'in'節を' = any(...) 'に変換し、内部的にはクエリプランでそれを見ることができます。 – Abelisto
[PreparedStatement IN句の代替案]の可能な複製?(http://stackoverflow.com/questions/178479/preparedstatement-in-clause-代替案) –