gpt4 book ai didi

java - Apache Camel - SQL 到 CSV

转载 作者:行者123 更新时间:2023-12-01 21:28:58 35 4
gpt4 key购买 nike

我尝试将sql结果转换为csv文件这是路线(bluprint.xml):

<route id="extractfromafbl">
<from uri="timer:foo?period=10000"/>
<to uri="sql:select * from performances?dataSource=afbl_source"/>
<to uri="bean:ngtrend.afbl2afc.transformer?method=tocsv(Exchange)"/>
<log message="${body}"/>
</route>

这是创建 csv 格式的转换器类:

    public class transformer {
public void tocsv(Exchange exchange)
{
StringBuilder csv = new StringBuilder();
List received = exchange.getIn().getBody(List.class);
for (int i = 0; i < received.size(); i++)
{
Map<String,Object> row = (Map<String,Object>) received.get(i);
csv.append(row.get("id"));
csv.append(",").append(row.get("lastname"));
csv.append(",").append(row.get("firstname"));
csv.append("\r");
}
}
}

在这种情况下,我应该知道字段的名称(例如 id、lastname ...)并且我想使用索引相反,因为表或字段可以更改。

如何使用索引而不是名称字段?

最佳答案

我知道你可以通过一些调整来使上面的代码工作,但我想我会提出一个建议,可以让整个问题对你来说更容易。 Camel SQL 组件可让您自动将数据库响应映射回对象。语法如下:

from("sql:select * from performances?dataSource=afbl_source?outputType=SelectList&outputClass=com.myapp.MyDatabaseModel")

完成此设置后,您将在您的 Camel 体内获得一个对象

List<MyDatabaseModel>

此时,您可以利用名为 Bindy 的驼峰组件。它会让你有一个代表 CSV 文件的对象。绑定(bind)它的方式是在数据库模型上添加一些注释,这样它也可以代表您的 csv 输出。

@CsvRecord(isOrdered = true)
public Class MyDatabaseModel{

@DataField(pos = 1, position = 11)
private int orderNr;

@DataField(pos = 2, position = 10)
private String clientNr;

...
}

对 Bindy 的调用将设置如下:

// Camel 2.15 or older (configure by package name)
BindyCsvDataFormat bindy = new BindyCsvDataFormat("com.myapp");
// Camel 2.16 onwards (configure by class name)
BindyCsvDataFormat bindy = new BindyCsvDataFormat(com.myapp.MyDatabaseModel.class);

.marshal(bindy)

将它们放在一起,您可以将项目分解为 2 行 Camel 和 1 个 Java 对象来完成此任务。 “下面是完整的 Camel ”

from("sql:select * from performances?dataSource=afbl_source?outputType=SelectList&outputClass=com.myapp.MyDatabaseModel")
.marshal(bindy);

我想我还应该提到,如果您不想过多担心 csv 顺序的配置,您实际上可以跳过整个注释过程,只需执行以下操作:

marshal().csv();

关于java - Apache Camel - SQL 到 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37654466/

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