- Apex编程教程
- Apex - 首页
- Apex - 概述
- Apex - 环境
- Apex - 示例
- Apex - 数据类型
- Apex - 变量
- Apex - 字符串
- Apex - 数组
- Apex - 常量
- Apex - 决策制定
- Apex - 循环
- Apex - 集合
- Apex - 类
- Apex - 方法
- Apex - 对象
- Apex - 接口
- Apex - DML
- Apex - 数据库方法
- Apex - SOSL
- Apex - SOQL
- Apex - 安全性
- Apex - 调用
- Apex - 触发器
- Apex - 触发器设计模式
- Apex - 限制
- Apex - 批处理
- Apex - 调试
- Apex - 测试
- Apex - 部署
- Apex有用资源
- Apex - 快速指南
- Apex - 资源
- Apex - 讨论
Apex - 数据库方法
数据库类方法是处理DML语句的另一种方式,它比insert、update等DML语句更灵活。
数据库方法和DML语句的区别
DML语句 | 数据库方法 |
---|---|
不允许部分更新。例如,如果列表中有20条记录,则要么所有记录都更新,要么都不更新。 | 允许部分更新。您可以在数据库方法中将参数指定为true或false,true表示允许部分更新,false表示不允许。 |
您无法获取成功和失败记录的列表。 | 您可以获取成功和失败记录的列表,正如我们在示例中看到的。 |
示例 - insert listName | 示例 - Database.insert(listName, False),其中false表示不允许部分更新。 |
插入操作
通过数据库方法插入新记录也很简单且灵活。让我们考虑之前的场景,我们使用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<apex_invoice__c> InvoiceListToInsert = new List<apex_invoice__c>(); 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()); } } }
更新操作
现在让我们使用数据库方法考虑我们的业务案例示例。假设我们需要更新Invoice对象的status字段,但同时我们还需要诸如记录状态、失败记录ID、成功计数等信息。这无法通过使用DML语句实现,因此我们必须使用数据库方法来获取操作的状态。
示例
如果Invoice的“状态”为“待处理”且创建日期为今天,我们将更新其“状态”字段。
以下代码将帮助使用Database.update方法更新Invoice记录。此外,在执行此代码之前,请创建Invoice记录。
// Code to update the records using the Database methods List<apex_invoice__c> invoiceList = [SELECT id, Name, APEX_Status__c, createdDate FROM APEX_Invoice__c WHERE createdDate = today]; // fetch the invoice created today List<apex_invoice__c> updatedInvoiceList = new List<apex_invoice__c>(); 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()); } } }
在本教程中,我们将仅关注插入和更新操作。其他操作与此类似,与上一章中我们所做的操作类似。
广告