325.10. 示例

在以下示例中,我们执行查询并检索结果作为行列表,其中每一行都是 Map<String, objects 则是列名。

首先,我们设置一个用于我们的样本的表。由于基于单元测试,我们在 java 中对其进行了:

SQL 脚本 createAndPopulateDatabase.sql 我们执行如下:

然后,我们将配置我们的路由和 sql 组件。请注意,我们在 sql 端点前面使用 直接 端点。这样,我们可以使用 URI 直接将交换发送到 直接 端点,直接:简单,客户端使用比长 sql: URI 更容易。请注意,DataSource 在 registry 中查找,因此我们可以使用标准的 Spring XML 配置我们的 DataSource

然后,我们将触发消息到 直接 端点,将它路由到查询数据库的 sql 组件。

我们可以在 Spring XML 中配置 DataSource,如下所示:

 <jee:jndi-lookup id="myDS" jndi-name="jdbc/myDataSource"/>

325.10.1. 使用命名参数

可从 Camel 2.11 开始

在给定路由中,我们希望从 projects 表中获取所有项目。请注意,SQL 查询具有 2 个命名参数 :#lic 和 :#min。
然后,Camel 将从消息正文或邮件标头中查找这些参数。请注意,在上面的示例中,我们为命名参数设置了带有恒定值
的两个标头:

   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")