3

パラメータ化されたクエリを次のように設定しようとしています。

SELECT field1 FROM myTable WHERE field2 IN (1,2,3,4)

私が使用しているデータベースはPostgresです。

このクエリはパラメータ化されていない状態で正常に実行されますが、JdbcTemplateでパラメータ化されたクエリを使用して、有効なfield2値(整数)のリストに入力したいと思います。

var( 、、、、、または)"1,2,3,4"のさまざまな値を試し"[1,2,3,4]"てみましたクエリのバリエーションを試しました:"{1,2,3,4}""(1,2,3,4)"

myJdbcTemplate.query("SELECT field1 FROM field2 IN (?)", new Object[]{ var })

myJdbcTemplate.query("SELECT field1 FROM field2 IN (?::integer[])", new Object[]{ var })

そしてまた

myJdbcTemplate.query("SELECT field1 FROM field2 IN ?::integer[]", new Object[]{ var })

ちなみに、クエリをパラメータ化する方法を説明するリソースも非常に役立ちます。

これらのクエリはすべて、演算子が失敗したこと、または型の不一致があることを示すPSQLExceptionsをスローします。これは、クエリをパラメータ化する方法がわからないため、合理的と思われます。

4

2 に答える 2

5

Spring Data AccessのWebページ、特にNamedParameterJdbcTemplateを使用して「IN」句を作成するセクション11.7.3を参照してください。

例えば

NamedParameterJdbcTemplate jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
String sql = "select * from emp where empno in (:ids)";
List idList = new ArrayList(2);
idList.add(new Long(7782));
idList.add(new Long(7788));
Map parameters = new HashMap();
parameters.put("ids", idList);
List emps = jdbcTemplate.query(sql, parameters, new EmpMapper());
于 2009-11-01T17:19:37.880 に答える
2

マニュアルをもう一度見てみました。配列を検索するために、次のような代替構文があるようです。

SELECT field1 FROM myTable WHERE field2 = ANY(ARRAY[1,2,3,4])

次のようにパラメータ化できます。

myJdbcTemplate.query("SELECT field1 FROM myTable WHERE field2 = ANY(?::integer[])"), new Object[]{ "{1,2,3,4}" })
于 2009-11-01T17:05:32.560 に答える