ColdFusion 11中如何循环查询数据并正确插入结构?
问题分析与解决方案
你的代码出现问题的核心原因是每处理一个列就会覆盖当前行的结构体内容:在内层循环遍历列的时候,你每次都新建一个strRec结构体,只存入当前列的键值对,然后直接赋值给fnData[qryData.currentrow]——这就导致每处理一个列,之前的列数据都会被覆盖,最终只有最后一次循环的列数据被保留(你的结果显示REC_ID,可能是循环顺序或currentrow的特殊表现,但本质逻辑是错误的)。
下面提供两种解决方案,根据你的实际需求选择:
方案1:生成包含完整行数据的结构体(适合后续数据处理)
如果需要保留结构化的数据供后续使用,我们需要为每一行创建一个单独的结构体,然后把所有列的键值对都累积到这个结构体中,最后再存入结果集合:
function formatData(qryData) { local.fnData = structNew(); if(qryData.recordcount > 0){ for(row in qryData) { // 为当前行初始化一个空结构体,用来存储所有列数据 local.currentRowStruct = structNew(); // 遍历当前行的所有列,把键值对添加到结构体中 for(column in qryData.columnList) { structInsert(currentRowStruct, column, row[column]); } // 将完整的行结构体存入结果集合 fnData[qryData.currentrow] = currentRowStruct; } } writeDump(fnData); return fnData; // 返回结果,方便调用方使用 }
方案2:生成你期望的字符串格式(直接输出目标样式)
如果你的最终需求是生成类似1 REC_ID 01 NAME PARIS STATUS Approved TYPE 1 YEAR 2019这种字符串格式,可以直接拼接字符串:
function formatData(qryData) { local.resultArray = []; if(qryData.recordcount > 0){ for(row in qryData) { // 初始化行字符串,先写入行号 local.rowStr = qryData.currentrow & " "; // 遍历所有列,拼接列名和对应值 for(column in qryData.columnList) { rowStr &= column & " " & row[column] & " "; } // 去除字符串末尾多余的空格 rowStr = trim(rowStr); // 将该行字符串加入结果数组 arrayAppend(resultArray, rowStr); } } // 输出结果数组,每个元素就是你要的格式 writeDump(resultArray); return resultArray; }
这两种方案都能解决你当前的问题,你可以根据实际业务场景选择使用。
内容的提问来源于stack exchange,提问作者espresso_coffee
相关产品推荐
相关产品推荐

