304.9. 例
以下の例では、クエリーを実行して行の 一覧
として結果を取得します。各行は Map<String, Object
で、キーは列名です。
まず、サンプルに使用するテーブルを設定します。これはユニットテストをベースとしているため、java で行います。
SQL スクリプト createAndPopulateDatabase.sql
は、以下のように実行します。
次に、ルートと sql
コンポーネントを設定します。sql
エンドポイントの前に direct
エンドポイントを使用していることに注意してください。これにより、URI( direct:simple
)で ダイレクト
エンドポイントにエクスチェンジを送信できます。これは、クライアントが長い sql:
URI よりも簡単に使用できます。DataSource
はレジストリーで検索されるため、標準の Spring XML を使用して DataSource
を設定できます。
そして、メッセージをデータベースをクエリーする sql
コンポーネントにルーティングする direct
エンドポイントで実行します。
以下のように Spring XML で DataSource
を設定できます。
<jee:jndi-lookup id="myDS" jndi-name="jdbc/myDataSource"/>
304.9.1. 名前付きパラメーターの使用
Camel 2.11 から利用可能
以下の指定のルートでは、プロジェクトテーブルからすべてのプロジェクトを取得します。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")
メッセージボディーが java.util.Map
の場合、名前付きパラメーターはボディーから取得されます。
from("direct:projects") .to("sql:select * from projects where license = :#lic and id > :#min order by id")