Salesforce: 简析Database.Query, Database.getQueryLocator, Database.countQuery
我们有时候根据需求,需要编写动态的SOQl语句,这个时候我们就需要用到Database.Query, Database.getQueryLocator以及Database.countQuery
1. Database.query
运行时它将作为SOQL查询执行并返回单个sObject或sObject List
sObject so = Database.query('SELECT Id FROM Account Limit 1');
List<sObject> sobjList = Database.query('SELECT Id FROM Account');
2. Database.countQuery
有时我们需要统计动态SOQL查询返回的记录总数。在这种情况下Database.countQuery可以使用。它将以Integer格式返回count
Integer totalAccounts = Database.countQuery('SELECT count() FROM Account');
它不能用于field properties的Aggregate results。例如以下代码,它将抛出错误消息"System.QueryException: Use query() for non-count queries"
Integer totalAccounts = Database.countQuery('SELECT count(id) FROM Account');
另外,Database.countquery 最多只返回50000条记录。如果它有超过50000条记录,它会抛出错误"Too many query rows: 50001 from with count()".
3. Database.getQueryLocator
它在运行时将返回一个Query Locator, 它主要使用在batch中,或者在VF中通过分页显示一个large sets.
Query locator最多可以返回5000万条记录,通常用来处理大数据。
Database.getQueryLocator('SELECT Id FROM Account');