326.10. 例
以下のサンプルでは、クエリーを実行し、結果を行の List として取得します。ここで、各行は Map<String, Object> であり、キーは列名です。
まず、サンプルに使用するテーブルを設定します。これは単体テストに基づいているため、Java で行います。
実行する SQL スクリプト createAndPopulateDatabase.sql は、次のようになります。
次に、ルートと SQL コンポーネントを設定します。SQL エンドポイントの前に direct エンドポイントを使用していることに注意してください。これにより、クライアントが長い sql: URI よりもはるかに使いやすい URI direct:simple を使用して、direct エンドポイントにエクスチェンジを送信できます。DataSource はレジストリーで検索されるため、標準の Spring XML を使用して DataSource を設定できることに注意してください。
次に、メッセージを direct エンドポイントに送信します。このエンドポイントは、データベースにクエリーを実行する SQL コンポーネントにメッセージをルーティングします。
次のように、Spring XML で DataSource を設定できます。
<jee:jndi-lookup id="myDS" jndi-name="jdbc/myDataSource"/>
<jee:jndi-lookup id="myDS" jndi-name="jdbc/myDataSource"/>
326.10.1. 名前付きパラメーターの使用 リンクのコピーリンクがクリップボードにコピーされました!
Camel 2.11 から利用可能
以下の特定のルートでは、projects テーブルからすべてのプロジェクトを取得します。SQL クエリーには、:#lic と :#min という 2 つの名前付きパラメーターがあることに注意してください。
Camel は、メッセージ本文またはメッセージヘッダーからこれらのパラメーターを検索します。上記の例では、2 つのヘッダーに定数値を設定していることに注意してください。
名前付きパラメーターの場合:
from("direct:projects")
.setHeader("lic", constant("ASF"))
.setHeader("min", constant(123))
.to("sql:select * from projects where license = :#lic and id > :#min order by id")
from("direct:projects")
.setHeader("lic", constant("ASF"))
.setHeader("min", constant(123))
.to("sql:select * from projects where license = :#lic and id > :#min order by id")
ただし、メッセージボディーが java.util.Map の場合、名前付きパラメーターは本文から取得されます。
from("direct:projects")
.to("sql:select * from projects where license = :#lic and id > :#min order by id")
from("direct:projects")
.to("sql:select * from projects where license = :#lic and id > :#min order by id")