Coldfusion Query 的查询运行时错误,不支持强制转换为 NULL 类型

标签 coldfusion

作为概念证明,我尝试将结构数组转换为查询对象,以便我可以使用 SQL 和查询的查询来查询它。我可以使用 queryNew() 将结构数组转换为查询对象:

<cfset qTest = queryNew(things)>

我发现我可以 cfdump 它,但无法查询它:

<cfquery name="myQuery" dbtype="query">
     SELECT *
     FROM qTest
</cfquery>

因为我收到此错误:

Query Of Queries runtime error.
Unsupported Cast Excpetion: Casting to type NULL is unsupported.

在谷歌搜索此错误并看到其他人遇到的问题后,我相信这与以下事实有关:当您以这种方式创建自定义查询时(即,仅向 queryNew() 提供结构数组,而不提供列列表或数据类型列表),然后查询对象将结构键解释为列名并采用适当的数据类型。

作为实验,我仅在数组中包含前十个结构(或行,如果您愿意),将数组提供给 queryNew(),并且在查询查询时没有任何问题。我增加了行数,直到达到第 130 行,然后再次收到该错误消息。如果数组只有 1-129 行,则没有问题,但当我添加第 130 行时,会出现错误消息。所以我认为第 130 行一定是问题行。但是,如果我只包含第 120-130 行,则没有问题。如果我只包含第 100-130 行,则没有问题。但如果我包含第 90-130 行,我会再次收到错误消息。

所以我认为,当我增加行数时,最终 CF 决定分配一种不同的数据类型,当包含第 130 行时,该数据类型会触发“不支持转换为 NULL 类型”。明显的解决方法通常是将列列表和数据类型列表作为参数包含在 queryNew() 中,但由于几个原因,这在我的情况下是不切实际的。第一,这是一个非常长的列列表(62)。第二,这非常不灵活;这个结构数组最终来自 API 的数据,如果列列表发生任何更改,我的代码就会崩溃。

所以我想知道是否有其他方法可以防止“不支持转换为 NULL 类型”错误。或者,是否有办法输出 CF 分配给每列的数据类型。否则,如果我无法使用 SQL 以查询格式处理这些数据,则必须循环遍历结构数组来查找并提取我想要的数据,这将非常麻烦。似乎这就是 Adob​​e 增强 queryNew() 以便能够首先接受结构数组作为参数的全部原因。

我会包含一些示例数据,但查询有 62 列。我希望这是一个已知问题,并且有已知的解决方法 - 谢谢。

最佳答案

正如 @EddieLotter 指出的那样,有很多方法可以单独使用数组函数来解决这个问题。例如,这里是ArrayFilter自 ACF 10 以来就已存在:

https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-a-b/arrayfilter.html

示例中的代码:

  <cfscript>
        superheroes=[
              {"name":"Iron Man","member":"Avengers"},
              {"name":"Wonder Woman","member":"Justice League"},
              {"name":"Hulk","member":"Avengers"},
              {"name":"Thor","member":"Avengers"},
              {"name":"Aquaman","member":"Justice League"}
        ];
        avengers=ArrayFilter(superheroes,function(item){
              return item.member=="Avengers";
        });
        writeDump(avengers);
  </cfscript>

这会输出包含键 member 的三个元素值为 Avengers 。只需使用 <cfloop type="array">而不是<cfquery> .

关于Coldfusion Query 的查询运行时错误,不支持强制转换为 NULL 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76680668/

相关文章:

coldfusion - 如何将 cftimer 显示的时间存储在变量中?

java - Coldfusion 读取不带扩展名的 XML HTTP

coldfusion - cfchart 单杠标签拥挤

javascript - ColdFusion:修改 cfgrid 中的组合框选项

coldfusion - 关于 ColdFusion 组件构造函数名称的问题

javascript - 如何使用 jQuery 发布链接变量?

jquery - <cflocation> 重定向导致 HTTP 错误 414 - 请求 URL 太长

logging - 什么时候应该使用 CFTRACE 与 CFLOG?

regex - 使用 RegEx for Coldfusion 查找 &lt;script&gt;&lt;/script&gt; 标签之间的文本,包括换行符

mysql - 为什么我的 cfloop 在插入第一个 id 后停止?