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

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

【问题讨论】:

    标签: coldfusion null


    【解决方案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 值在查询中转换为空字符串“”。
      猜你喜欢
      • 1970-01-01
      • 2016-11-07
      • 2019-10-19
      • 1970-01-01
      • 2018-04-11
      • 1970-01-01
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      相关资源
      最近更新 更多