場景:
jdbc request 查詢結(jié)果為多行數(shù)據(jù)。獲取這些數(shù)據(jù)并返回
1、建立JDBC Connection Configuration 連接
2、創(chuàng)建jdbc request,查詢sql如下:
SELECT? 'VEHICLE_SUB_MODEL_ID='|| '"' ||? t.VEHICLE_SUB_MODEL_ID ||'"'? FROM t_md_vehicle_model t WHERE t.TIMING_ID in (${tidStr})? AND ((t.BEGIN_YEAR <= ${year} and t.END_YEAR is null) or (t.BEGIN_YEAR is null and t.END_YEAR >= ${year}) or (t.BEGIN_YEAR <= ${year} and t.END_YEAR >= ${year}))
注1:上述sql中,'VEHICLE_SUB_MODEL_ID='|| '"' ||? t.VEHICLE_SUB_MODEL_ID ||'"' ,返回的結(jié)果,格式如下:

注2:如果直接這樣:SELECT? t.VEHICLE_SUB_MODEL_ID? FROM t_md_vehicle_model t WHERE t.TIMING_ID in (${tidStr})? ,返回的結(jié)果,格式如下:

3、好了,上面已經(jīng)得到查詢結(jié)果,接下來需要將響應(yīng)的數(shù)據(jù)中的VEHICLE_SUB_MODEL_ID? 提取出來。
新增正則表達(dá)式提取器,設(shè)置如下:
其中引用名稱model,后續(xù)傳參要用到,因為上面的jdbc request響應(yīng)數(shù)據(jù)已經(jīng)被格式化,所以正則表達(dá)式直接用 字段名="(.+?)"的格式

如果采用注2中的sql進(jìn)行查詢,正則表達(dá)式的格式需要這樣:字段名\n([^"]+)

4、上一步將VEHICLE_SUB_MODEL_ID? 提取后,察看結(jié)果樹中 數(shù)據(jù)的個數(shù)為24個

通過獲取model的個數(shù),分別提取每一個modelId.
新增一個BeanShell PostProcessor,先獲取model的個數(shù),然后通過for循環(huán) ,拼接model_n,加入到list中
將list轉(zhuǎn)化成字符串,并輸出

String? model_num =vars.get("model_matchNr");
int num = Integer.parseInt(model_num);
log.info("車型ID個數(shù):"+num);
List list = new ArrayList();
for(int i=1;i<=num;i++){
String ss ="model_"+i ;
String modelId = vars.get(ss);
//log.info("model is :"+ ss);
log.info("model is :"+ modelId);
list.add(modelId);
}
log.info("可用的款型個數(shù)為:"+list.size());
StringBuilder csvBuilder = new StringBuilder();
for(String i:list){
csvBuilder.append(i);
csvBuilder.append(",");
}
String csv = csvBuilder.toString();? ? //保存VMI組件結(jié)果,供后續(xù)比較使用
csv = csv.substring(0,csv.length()-1);
vars.put("VMI2Result",csv);
log.info("可用款型分別為:"+vars.get("VMI2Result")+"\n");