我想將exchange.body插入到我的路由條件之一的數據庫表中。在表中插入一行的Apache Camel示例
- 是否有任何camel-jdbc組件的示例/教程插入消息正文?
- 我可以導入SQL語句本身並將exchange.body傳遞給它嗎?
我看着http://camel.apache.org/jdbc.html的例子,但無法理解它。
這裏Spring例子令我困惑。我沒有得到它爲什麼將它設置爲SQL查詢並再次從類路徑導入一些查詢。 (這裏沒有提到插入查詢的例子)
我想將exchange.body插入到我的路由條件之一的數據庫表中。在表中插入一行的Apache Camel示例
我看着http://camel.apache.org/jdbc.html的例子,但無法理解它。
這裏Spring例子令我困惑。我沒有得到它爲什麼將它設置爲SQL查詢並再次從類路徑導入一些查詢。 (這裏沒有提到插入查詢的例子)
在插入它之前,你可能需要對你的有效載荷進行一些重構,所以應該沒有問題可以用駱駝的任何方法來設置主體到適當的INSERT語句。
重要的是你的傳入消息有什麼樣的有效載荷結構。在基本情況下 - 這是一個字符串 - 它應該是相當簡單的
// In a Java bean/processor before the JDBC endpoint.
// Update: make sure to sanitize the payload from SQL injections if it contains user inputs or external data not generated by trusted sources.
exchange.getIn().setBody("INSERT INTO MYTABLE VALUES('" + exchange.getIn().getBody(String.class) + "', 'fixedValue', 1.0, 42)");
如果你的消息中包含複雜的數據結構,這個代碼當然會更加複雜,但它幾乎以同樣的方式常規應用程序會產生SQL查詢。
你指的
<jdbc:embedded-database id="testdb" type="DERBY">
<jdbc:script location="classpath:sql/init.sql"/>
</jdbc:embedded-database>
類路徑例子只顯示瞭如何通過啓動嵌入式數據庫服務器(Apache Derby的)來測試JDBC分量和與一些初始數據填充它(SQL/init.sql文件)。這部分不是核心jdbc組件的一部分,而只是在文檔中啓動並運行示例,而無需配置數據庫服務器並設置JDBC連接屬性。
也就是說,您可能想要將SQL組件用於更復雜的場景。
請注意。該示例使得執行SQL注入攻擊非常容易。儘管爲了防止這種情況發生,但可能會逃脫身體內容。 –
好點。我不認爲有任何傻瓜證明的方式來執行JDBC組件的SQL注入安全INSERT語句。數據必須手動清理。所以,改爲使用SQL組件的另一個原因。 OWASP和其他一些編寫代碼的用戶可以在一定程度上清除SQL語句:https://www.owasp.org/index.php/ESAPI –
另一個安全的選擇是使用camel-jpa組件。它支持將行添加到表中。關於camel-jpa的另一個好處是,它還支持從表中讀取的另一面,並希望在成功時刪除記錄。 –
如果要插入使用相同的語句(僅更改參數) - 使用SQL component。
如果要使用將任意SQL語句插入到組件中 - 請使用JDBC component。
SQL組件的使用:
from("direct:start").to("sql:insert into table foo (c1, c1) values ('#','#')");
com.google.common.collect.Lists;
producerTemplate.sendBody("direct:start", Lists.newArrayList("value1","value2"));
JDBC組件使用:
from("direct:start").to("jdbc:dataSource");
producerTemplate.sendBody("direct:start", "insert into table foo (c1, c1) values ('value1','value2')");
@AndrewThompson我找了幾個例子,但我無法理解他們。我無法找到任何具體的插入消息正文。 –
@AndrewThompson我無法理解http://camel.apache.org/jdbc.html示例。這裏Spring例子令我困惑。我沒有得到它爲什麼將它設置爲sql查詢並再次從類路徑導入一些查詢。這裏沒有提到插入查詢的例子。
–
jdbc組件使用body作爲SQL查詢的來源。如果你想在你的身上傳遞數據,可以考慮使用SQL(http://camel.apache.org/sql-component.html)或MyBatis(http://camel.apache。org/mybatis.html)組件 –