Apex: SOQL语句未查询到数据时的返回值

今日发现很久以前的一段代码发生报错,疑惑不已。

最近并没有修改这个Class, 怎么会突然报错呢~

报错代码大致如下:

List<Approval_Process__c> processes = [SELECT Id, Status__c FROM Approval_Process__c WHERE Stage__c = 'Collections' LIMIT 1];
if (processes != null && processes[0].Status__c == 'Approved') {
  System.debug('test');
} else {
  System.debug('test1');
}
 
报错在第二行,报错信息为List index out of bounds: 0 
 
初看时表示我不李姐,这不明明判断这个List不为空了嘛!
 
做了一些测试之后,发现自己还是太年轻啊T.T
 
List<Approval_Process__c> processes = [SELECT Id, Status__c FROM Approval_Process__c WHERE Stage__c = 'Collections' LIMIT 1];
System.debug(processes);
Approval_Process__c c = [SELECT Id, Status__c FROM Approval_Process__c WHERE Stage__c = 'Collections' LIMIT 1];
System.debug(processes);
 
同样在没有符合条件的数据返回时,第一个debug将返回一个空List, 而第二debug将直接报错List has no rows for assignment to SObject
 
所以我们并不能通过processes != null来进行判断是否有返回数据,
 
而是要用!processes.isEmpty()
 
Got it!

 

posted @ 2022-01-26 11:35  Clsriz  阅读(69)  评论(0编辑  收藏  举报