gpt4 book ai didi

mysql - Camel Blueprint为准备好的sql语句指定参数

转载 作者:行者123 更新时间:2023-11-29 18:50:28 25 4
gpt4 key购买 nike

我有一个轮询丰富,它使用 SQL 查询的结果(来自 MySQL 数据库)丰富 POJO。目前它从 POJO 获取品牌,然后从与品牌匹配的订单中获取名称。我必须在 ${body.getBrand} 周围添加引号,否则查询将查找包含品牌名称的列而不是使用值。目前它看起来像这样:

<pollEnrich id="_enrich1" strategyRef="merge" timeout="5000">
<simple>sql:SELECT name FROM orders WHERE brand= '${body.getBrand}'</simple>
</pollEnrich>

我想更改它,因为我可能需要创建更多 sql 查询,并且如果值包含引号,当前版本将无法工作,因此容易受到 sql 注入(inject)的攻击。<​​/p>

我认为准备好的语句可以解决问题,并想使用命名参数,但我似乎无法设置参数的值。

我尝试了许多不同的事情,例如设置 header 并将查询更改为具有命名参数:

<setHeader headerName="brand" id="brand">
<simple>${body.getBrand}</simple>
</setHeader>
<pollEnrich id="_enrich1" strategyRef="merge" timeout="5000">
<simple>sql:SELECT name FROM orders WHERE brand= :#brand</simple>
</pollEnrich>

但我不断得到

PreparedStatementCallback; bad SQL grammar [SELECT name FROM orders WHERE brand= ?]; nested exception is java.sql.SQLException: No value specified for parameter 1

我还尝试将 useMessageBodyForSql 选项设置为 true(因为这似乎可能有帮助?),但我尝试过的似乎都不起作用。

我见过很多人们用java设置路由的例子/解决方案,但我想也一定有一个针对蓝图xml的解决方案?

如果有人有任何建议或示例,那就太好了。

最佳答案

在 Camel 版本 < 2.16 中,pollEnrich 无权访问原始交换,因此无法读取您的 header ,因此出现异常。这记录在此处:http://camel.apache.org/content-enricher.html从您的示例猜测,正常的丰富也应该可以工作,并且它可以访问原始交换。尝试将“pollEnrich”更改为“enrich”。

关于mysql - Camel Blueprint为准备好的sql语句指定参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44372263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com