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!