MeterSphere平台中SQL数据库查询结果存储有两种方式:
1、按列存储
2、按结果存储
MeterSphere平台显示如下图:
一、按列存储的使用方式:
按列存储是按照查询的每个字段值进行存储
根据查询返回结果字段从左到右的顺序才能取到我们需要指定字段里面的值,不是我们写个Type名称就对应返回结果中Type字段的数据。示例如下:
上图中Type列在返回结果中第三列,我们现在要取出Type列的数据。按列存储填写方式如下,这样Type取出的值才是查询返回结果中第三列Type字段的值。
上面返回的查询结果列数非常多。这个时候我们要取最后一列数据,那么前面每列的名称都要写出来。那是多么麻烦的事情呀,不符合用代码做事的风格。
注:这个时候就可以用逗号作为占位符代替列名,只有需要提取列名称上的数据才写列名即可。
二、按结果存储及内容解析
按结果存储 是将返回结果所有的字段存储到一个变量中去,如果需要使用其中的某个字段则需要对变量进行解析,里面的实际数据是集合嵌套集合。
就是说,每一行数据都是以 <字段名>:<字段值>( 即key :value)的格式存到map中的,而整个返回数据就是以一个大的map去存储每一行的数据的map ,最后得到一个结果集合,如果需要其中的数据,得通过beanshell或python脚本去解析。
下面为beanshell解析的内容demo 其中data为按结果存储的变量
import org.json.*;
List share=vars.getObject("data");
//如果数据库返回为null,则增加断言
if (share == null || share.size() < 1) {
AssertionResult.setFailure(true);
AssertionResult.setFailureMessage("数据库查询结果返回为空");
return;
}
log.info("数据库返回数据为:"+share.size());
//循环嵌套打印出每个字段及对应的字段值
for (Object datum : share) {
Map map=(Map)datum;
for(Object k:map.keySet()){
String key=k;
Object value=map.get(k);
System.out.println("key:"+k.toString()+" value:"+value);
}
}