如何从 ColdFusion 查询循环中的返回值中检查空值

Posted

技术标签:

【中文标题】如何从 ColdFusion 查询循环中的返回值中检查空值【英文标题】:How to check for a null value from the return value in ColdFusion query loop 【发布时间】:2012-03-01 14:49:00 【问题描述】:
<cfloop query="GET_ALL_STUDENTS>
 <cfif #student_id# is  NOT NULL>
 <!--- do something--->
 </cfif>
</cfloop>   

以上是我如何循环我的 cf 查询,它返回空值,我想检查 student_id 是否为空。这是我尝试过的,但失败了。谁能告诉我更好的方法?

【问题讨论】:

【参考方案1】:

虽然 CFQuery 对象的 java 类 (coldfusion.sql.QueryTable) 将为任何空值返回空字符串,但它的父类 Coldfusion.sql.Table 提供了一个方法 getField(row, column) 直接访问查询表值,如果值为空,则返回“未定义”。我们可以利用 IsNull 来识别“未定义”,从而能够检测 NULL。

<CFLOOP query="GET_ALL_STUDENTS">
    Row = #CurrentRow#
    <CFIF IsNull(GET_ALL_STUDENTS.getField(GET_ALL_STUDENTS.CurrentRow, GET_ALL_STUDENTS.findColumn('student_id')))>
        [NULL]
    <CFELSE>
        #GET_ALL_STUDENTS.student_id#
    </CFIF>
    <br>
</CFLOOP>

参考:http://laxmanthota.blogspot.com/2010/11/cfquery-and-underlying-java-objects.html

【讨论】:

虽然此代码 sn-p 可能会解决问题并提供一些有限的即时帮助。 proper explanation 将通过展示为什么这是解决问题的好方法,并使其对有其他类似问题的未来读者更有用,从而大大提高其长期价值。请考虑edit 您的回答以添加一些解释,包括您所做的假设。 请在您的回答中添加一些解释。【参考方案2】:

在 Adob​​e ColdFusion 9 中,您可以:

<cfif IsNull(student_id)>
</cfif>

或者因为你正在做相反的事情:

<cfif NOT IsNull(student_id)>
</cfif>

【讨论】:

如果变量是数据库查询的结果,那么在CF中空结果会变成空字符串,那么你必须使用len()【参考方案3】:

看起来查询正在检索所有学生,然后对记录进行 cfloop 以查找为 NULL 的 student_id 字段。

编写一个专门查询 student_id 为 NULL 的记录的查询会更有效。

当你有 100 名左右的学生时,获取所有学生表记录的方法会很有效。投产后有25000名学生会怎样?

【讨论】:

【参考方案4】:

您可以使用数据库的 ifNull() 等。但是,在 ColdFusion 中,查询以字符串形式返回。鉴于您的情况,最简单的方法是检查非空字符串:

<cfif len(student_id)>

顺便说一句,你不需要在求值中使用井号:仅当使用变量作为文字时(例如输出时)

【讨论】:

小澄清,null 值在查询中转换为空字符串“”。

以上是关于如何从 ColdFusion 查询循环中的返回值中检查空值的主要内容,如果未能解决你的问题,请参考以下文章

从 Objective-C 中的 ColdFusion 布尔返回类型获取 BOOL 的更好方法?

cfcomponent 中的 cfquery 未在 Coldfusion 9 中返回最新结果

ColdFusion中的查询优化

如何从一组自定义字段值中显示 Wordpress 帖子

Coldfusion / Lucee - 使用一个查询循环遍历3D数组以使用多个插入插入到数据库中

如何使用 CreateNativeQuery 从 SQL 数据库值中查询单个值?