如何从 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】:在 Adobe 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 中返回最新结果