JMeter,如何将JDBC查询结果写入csv,包括列名?

JMeter,如何将JDBC查询结果写入csv,包括列名?,jmeter,Jmeter,我想将JDBC查询的结果写成csv文件,包括一行列的名称 我可以通过定义一个JDBC预处理器(其中我将结果变量名分配给resultSet)和一个JSR223预处理器(其中我包含下面要写入csv的脚本)来编写结果 但是,vars.getObjectresultSet返回的变量;是一个集合,因此我无法获取列名信息。是否可以将ResultSet对象传递给JSR223预处理器,以便导出列名 resultSet = vars.getObject("resultSet"); result = new Str

我想将JDBC查询的结果写成csv文件,包括一行列的名称

我可以通过定义一个JDBC预处理器(其中我将结果变量名分配给resultSet)和一个JSR223预处理器(其中我包含下面要写入csv的脚本)来编写结果

但是,vars.getObjectresultSet返回的变量;是一个集合,因此我无法获取列名信息。是否可以将ResultSet对象传递给JSR223预处理器,以便导出列名

resultSet = vars.getObject("resultSet");
result = new StringBuilder();

//for (int i = 0; i <= resultSet.getMetaData().getColumnCount(); i++) {
//  result.append(resultSet.getMetaData().getColumnName(i));
//  result.append(',');
//}
//result.append(System.getProperty("line.separator"));

for (Object row : resultSet ) {
    iter = row.entrySet().iterator();
    while (iter.hasNext()) {
        pair = iter.next();
        result.append(pair.getValue());
        result.append(",");
    }
    result.append(System.getProperty("line.separator"));
}

org.apache.commons.io.FileUtils.writeStringToFile(new File("/tmp/data", "results.csv"), result.toString(), "UTF-8");

Java、Apache Commons CSV、OpenCSV中有许多CSV库

而不是试图运行一个通用的SQL语句,如SELECT*FROM table_name;我会详细说明你真正需要的专栏。然后您就知道要添加到CSV文件中的列名

如果您确实想创建一些通用的东西,也可以解析列的名称,这个答案可能会提供您想要的-

您的结果集已经有了列名。根据第条:

关于使用结果变量名,如前所述,每个结果集行有一个映射。映射项计数取决于列值,映射项名称将与结果集列名相同,映射项值将是值本身

因此,您需要修改代码以读取列名,例如:

resultSet = vars.getObject("resultSet")
result = new StringBuilder()

def randomRow = resultSet.get(org.apache.commons.lang3.RandomUtils.nextInt(0,resultSet.size()))

randomRow.each { k, v -> 
    result.append("${k}").append(",")
}
result.append(System.getProperty("line.separator"))

for (Object row : resultSet ) {
    iter = row.entrySet().iterator()
    while (iter.hasNext()) {
        pair = iter.next()
        result.append(pair.getValue())
        result.append(",")
    }
    result.append(System.getProperty("line.separator"))
}

org.apache.commons.io.FileUtils.writeStringToFile(new File("foo.csv"), result.toString(), "UTF-8")

问题是vars.getObjectresultSet提供的resultSet对象;是ArrayList类型而不是ResultSetHanks类型,这很有意义。。。但是有可能得到结果元数据吗?了解列数据类型也很有用