On Tue, Nov 14, 2017 at 11:53 AM, Christian Stark <starki...@gmail.com> wrote: > Thanks Claus > > I found the following example very helpful. > The SQL returns multiple rows and I need to map the Columns to other > Objects. > > http://www.javarticles.com/2015/07/apache-camel-jdbc-select-example.html > > > The only thing I need to find out is how to reuse the Output of my > Transformer Class as Input for the Insert. >
What information from the Article java class do you want to store in the SQL insert? You are doing now: NSERT INTO USERS (column1) values(*${body[0]}) Where body[0] means that you access a java.util.list or array and grab the first element. Instead you may want to call a getter/property on the Article class, for example the getAuthor method INSERT INTO USERS (column1) values(${body.getAuthor()}) And if its a getter you can use a short-hand version INSERT INTO USERS (column1) values(${body.author}) And you may need to add single quotes around the values, as if its a varchar/string type, eg to be SQL compliant INSERT INTO USERS (column1) values('${body.author'}) > > > <camelContext id="camelContext-1b6e9b83-bc33-4311-9e9b-0f2458fcedd9" xmlns=" > http://camel.apache.org/schema/spring"> > <route id="_route1"> > <from id="_from1" uri="timer://timer1?period=2s"/> > <setBody id="_setBody1"> > <constant> > select user_nm,email_id from drupal_users where user_id > < 5000 > </constant> > </setBody> > <to id="_to1" uri="jdbc:myDataSource"/> > <split id="_split1"> > <simple>${body}</simple> > <to uri="bean:rowProcessor" /> > <to uri="stream:out"/> > <setBody id="_setBody2"> > <simple>INSERT INTO USERS (column1) values(*${body[0]})* > </simple> > </setBody> > <to id="_to3" uri="jdbc:myDataSource2"/> > </split> > </route> > <bean class="org.mycompany.MyTransformer" id="rowProcessor"/> > > > import java.util.Map; > > import org.apache.camel.Exchange; > import org.apache.camel.Processor; > > public class MyTransformer implements Processor { > > public void process(Exchange exchange) throws Exception { > Map<String, Object> row = exchange.getIn().getBody(Map.class); > System.out.println("Processing " + row); > Article article = new Article(); > > article.setAuthor((String) row.get("email_id")); > > > *exchange.getOut().setBody(article);* > > } > > > > > > > 2017-11-13 13:48 GMT+01:00 Claus Ibsen <claus.ib...@gmail.com>: > >> Hi >> >> If the 1st query return only 1 row, then you can set outputType=SelectOne >> >> Then the returned value is a Map >> Then you can use the column names as-is in the 2nd query >> >> See the docs at >> https://github.com/apache/camel/blob/master/components/ >> camel-sql/src/main/docs/sql-component.adoc >> >> On Mon, Nov 13, 2017 at 1:41 PM, Christian Stark <starki...@gmail.com> >> wrote: >> > Hello, >> > >> > Assuming the following example: I'd like to know how to >> control/manipulate >> > the variables to insert the input from the first query from >> table/database1 >> > into the second table/database2. >> > What is the best option to manipulate $input1,$input2,$input3 >> > >> > Do we need a transformer or a converter? >> > >> > >> > <route id="demo_route"> >> > <from id="route-timer" uri="timer:foo?period=20000"/> >> > <to id="_to1" uri="sql:SELECT column1,column2,column3 FROM >> > testtable where key = ':3685127';?dataSource=myDataSource"/> >> > >> > <to id="_to2" uri="sql:INSERT INTO USERS >> > (column1,column2,column3) values >> > ('$input1,$input2,$input3)?dataSource=myDataSource2"/> >> > </route> >> > >> > >> > >> > Any input is appreciated >> > >> > >> > Thanks >> > Christian >> >> >> >> -- >> Claus Ibsen >> ----------------- >> http://davsclaus.com @davsclaus >> Camel in Action 2: https://www.manning.com/ibsen2 >> -- Claus Ibsen ----------------- http://davsclaus.com @davsclaus Camel in Action 2: https://www.manning.com/ibsen2