2012-03-20 18 views
1

PreparedStatementを使用してSQLクエリのIN句に複数のパラメータを設定する方法を知りました。複数のパラメータ "IN" prepared statement

たとえば、このSQL文では、私は?の不定数を持っています。

select * from ifs_db where img_hub = ? and country IN (multiple ?) 

私は上記の私のSQL文にそれを適用する方法、それを把握することはできませんしかし PreparedStatement IN clause alternatives?

でこれについて読みました。

+0

あなたは他の質問のリンクを見ましたか? http://www.javaranch.com/journal/200510/Journal200510.jsp#a2 –

+0

はい私はしました...私はいくつかの再検索を行いました – toink

+0

それらのほとんどは "id"またはintをパラメータとして使用していました。これは、パラメータが文字列の場合に適用されます....ありがとう、 – toink

答えて

1

Sormulaは、任意のデータのために動作しますタイプ(カスタムタイプも含む)。 This exampleは簡単のためにintを使用しています。

ArrayList<Integer> partNumbers = new ArrayList<Integer>(); 
partNumbers.add(999); 
partNumbers.add(777); 
partNumbers.add(1234); 

// set up 
Database database = new Database(getConnection()); 
Table<Inventory> inventoryTable = database.getTable(Inventory.class); 

ArrayListSelectOperation<Inventory> operation = 
    new ArrayListSelectOperation<Inventory>(inventoryTable, "partNumberIn"); 

// show results 
for (Inventory inventory: operation.selectAll(partNumbers)) 
    System.out.println(inventory.getPartNumber()); 
2

これを処理する標準的な方法はありません。

SQL Serverでは、ストアドプロシージャでテーブル値のパラメータを使用し、テーブル内の各国を渡して結合で使用できます。

カンマで区切られたリストが渡され、関数によってテーブルに解析されてから結合で使用されるケースもあります。

あなたの国が「#米国#英国#DE#NLの#」のように区切られたリスト内の標準ISOコードであれば、あなたのようなかなり単純な構文を使用することができます。

select * from ifs_db where img_hub = ? and ? LIKE '%#' + country + '#%' 
+0

Oracleで同じことを行います:CallableStatement with配列INパラメータとカーソルOUTパラメータ。格納されたprocは、refcursorを形成するために結合を行っています。 – Glenn

0
You could use setArray method as mentioned in the javadoc below: 

http://docs.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html#setArray(int, java.sql.Array) 

Code: 
PreparedStatement statement = connection.prepareStatement("Select * from test where field in (?)"); 
Array array = statement.getConnection().createArrayOf("VARCHAR", new Object[]{"AA1", "BB2","CC3"}); 
statement.setArray(1, array); 
ResultSet rs = statement.executeQuery(); 
関連する問題