cassandra Camel CQL组件-使用多个参数进行查询

x759pob2  于 2022-11-05  发布在  Cassandra
关注(0)|答案(1)|浏览(129)

我正在使用CQL组件创建一个Camel路由,该路由使用Cassandra DB中的数据,并且我希望将多个参数传递给where语句。
如何传递多个参数以在内部构造准备好的策略?
我已经检查了DOC,并且找到了传递一个参数的方法:

rest("cassandra")
        .get()
            .route()
            .routeId("teste")
            .removeHeaders("Camel*")
            .setHeader(Exchange.HTTP_METHOD, simple(HttpMethod.GET.name()))
            .process(e-> e.getIn().setBody("Gabriel")
            .to("cql://localhost:9042/teste?cql=SELECT * FROM teste_table where name = ? ALLOW FILTERING")

上面的方法工作正常,但是我想传递多个参数。

ibps3vxo

ibps3vxo1#

经过几次尝试后,我找到了一种方法,只需在exchange in body中传递一个对象数组即可,如下所示:

import com.datastax.driver.core.LocalDate;
import com.datastax.driver.core.Row;
...
rest("cassandra")
        .get()
            .route()
            .routeId("test-route")
            .removeHeaders("Camel*")
            .setHeader(Exchange.HTTP_METHOD, simple(HttpMethod.GET.name()))
            .process(e-> e.getIn().setBody(new Object[] {"Gabriel", LocalDate.fromYearMonthDay(1994, 10, 25)}))
            .to("cql://localhost:9042/teste?cql=SELECT * FROM teste_table where name = ? and date_of_birth= ? ALLOW FILTERING")
            .process(e -> {
                Row[] rows = e.getIn().getBody(Row[].class);
                for (Row row : rows)
                     System.out.println("name: " + row.getString("name") + ", idade: " + row.getInt("idade"));
            });

相关问题