×
Apex 编程教程Apex 环境Apex 示例Apex 数据类型Apex 变量Apex 字符串Apex 数组Apex 常量Apex 决策Apex 循环Apex 集合Apex 类Apex 类方法Apex 对象Apex 接口Apex DMLApex 数据库方法Apex SOSLApex SOQLApex 安全性Apex 调用Apex 触发器Apex 触发设计模式Governer Limits调节器限制Apex 批量处理Apex 调试Apex 测试Apex 部署Apex 字符串Apex 数组

Apex 数据库方法


数据库类方法是使用DML语句的另一种方法,它比DML语句更灵活,如插入,更新等。

数据库方法和DML语句之间的差异

DML语句 数据库方法
不允许部分更新。 例如,如果列表中有20条记录,则所有记录都将更新或不更新。 允许部分更新。 您可以在Database方法中指定参数为true或false,true表示允许部分更新,false表示不允许相同。
您无法获取成功和失败记录的列表。 您可以获取成功和失败记录的列表,如我们在示例中看到的。
示例:insert listName; 示例:Database.insert(listName,False),其中false表示不允许部分更新。


INSERT插入操作

通过数据库方法插入新记录也非常简单和灵活。 让我们采用前面的场景,其中我们使用DML语句插入了新的记录。 我们将插入相同的使用数据库方法。


例如:

//Insert Operation Using Database methods
//Insert Customer Records First using simple DML Statement. This Customer Record will be used when we will create Invoice Records
APEX_Customer__c objCust = new APEX_Customer__C();
objCust.Name = 'Test';
insert objCust;//Inserting the Customer Records
	
//Insert Operation Using Database methods
APEX_Invoice__c objNewInvoice = new APEX_Invoice__c();
List InvoiceListToInsert = new List();
objNewInvoice.APEX_Status__c = 'Pending';
objNewInvoice.APEX_Customer__c = objCust.id;
objNewInvoice.APEX_Amount_Paid__c = 1000;
InvoiceListToInsert.add(objNewInvoice);
Database.SaveResult[] srList = Database.insert(InvoiceListToInsert, false);//Database method to insert the records in List
	
// Iterate through each returned result by the method
for (Database.SaveResult sr : srList) {
	if (sr.isSuccess()) {
    // This condition will be executed for successful records and will fetch the ids of successful records
	System.debug('Successfully inserted Invoice. Invoice ID: ' + sr.getId());//Get the invoice id of inserted Account
	}
else {
    // This condition will be executed for failed records
	for(Database.Error objErr : sr.getErrors()) {
		System.debug('The following error has occurred.');  //Printing error message in Debug log
		System.debug(objErr.getStatusCode() + ': ' + objErr.getMessage());
		System.debug('Invoice oject field which are affected by the error: ' + objErr.getFields());
	}
}
}


UPDATE更新操作

让我们来看看使用数据库方法的业务案例示例。 假设我们想更新Invoice对象的状态字段,但是同时,我们希望有诸如记录状态,失败的记录ID,成功计数等信息。这是不可能通过使用DML语句完成的,因此我们必须使用数据库方法来获取我们操作的状态。


例如:

如果发票的状态为“待处理”,且创建日期为今天,我们将更新发票的“状态”字段。

下面的代码是使用Database.update方法更新发票记录。 此外,在执行此代码之前创建发票记录。

//Code to update the records using the Database methods
List invoiceList = [SELECT id, Name, APEX_Status__c, createdDate FROM APEX_Invoice__c WHERE createdDate = today];//fetch the invoice created today
List updatedInvoiceList = new List();
for (APEX_Invoice__c objInvoice: invoiceList) {
	if (objInvoice.APEX_Status__c == 'Pending') {
		objInvoice.APEX_Status__c = 'Paid';
		updatedInvoiceList.add(objInvoice);//Adding records to the list
	}
	
}
Database.SaveResult[] srList = Database.update(updatedInvoiceList, false);//Database method to update the records in List


// Iterate through each returned result by the method
for (Database.SaveResult sr : srList) {
if (sr.isSuccess()) {
    // This condition will be executed for successful records and will fetch the ids of successful records
    System.debug('Successfully updated Invoice. Invoice ID is : ' + sr.getId());
}
else {
    // This condition will be executed for failed records
	for(Database.Error objErr : sr.getErrors()) {
		System.debug('The following error has occurred.');//Printing error message in Debug log
		System.debug(objErr.getStatusCode() + ': ' + objErr.getMessage());
		System.debug('Invoice oject field which are affected by the error: ' + objErr.getFields());
	}
}
}

我们将只看本教程中的插入和更新操作.。 其他操作与这些操作非常相似,我们在上一章中做过了

分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)