课程章节介绍
同学们,今天咱们来聊聊Apex里一个非常实用的小技巧——怎么优雅地处理查询不返回数据的情况。
想象一下,你写了个SOQL,想直接拿到一条记录,比如查某个客户的联系方式。代码可能长这样:`Contact c = [SELECT Name FROM Contact WHERE Email = 'xxx'];` 如果数据库里正好有这条记录,那没问题;但要是没有呢?程序就会抛出一个异常,啪一下中断了,你得额外写一堆try-catch来处理,挺麻烦的。
这时候,Apex提供的“空合并操作符”就能帮大忙。它长得像两个问号:`??`。怎么用呢?你把SOQL查询放在左边,右边放一个备用值。这么写:`Contact c = [SELECT Name FROM Contact WHERE Email = 'xxx'] ?? new Contact();` 意思就是,如果查询真的返回了一行,c就装那条记录;如果一行都没返回,就不会报错了,而是把右边这个新建的Contact对象赋给c。很聪明吧,一行代码就处理好了“可能没数据”的情况。
不过用起来有几点要留心。第一,这个`??`操作符不能放在赋值号的左边,它只能用来产生一个值,不能用来决定把某个值赋给什么。第二,SOQL语句内部是不支持直接写`??`的,它只作用在整个查询结果上。第三点也很重要,Salesforce建议咱们在一条声明语句里,不要混用多个SOQL查询再加上空合并操作符,不然代码读起来会乱,也容易出问题。
总结一下,当你需要做单条记录的查询,又怕查不到就报错,就用`SOQL查询 ?? 默认对象`这种写法,既简洁又安全。记住它的限制,就能让你的代码更健壮,不用再满屏的异常捕获了。
好,这一小块知识点就讲到这里,大家动手试试看吧。
关键词
Apex
Salesforce
Developer Guide