当前位置: 首页 > 文档资料 > Apex 中文教程 >

数据库方法( Database Methods)

优质
小牛编辑
125浏览
2023-12-01

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

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

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

插入操作 (Insert Operation)

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

例子 (Example)

// 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());
      }
   }
}

更新操作 (Update Operation)

现在让我们使用数据库方法考虑我们的业务案例。 假设我们需要更新Invoice对象的状态字段,但同时,我们还需要记录状态,记录ID失败,成功计数等信息。这是使用DML语句无法实现的,因此我们必须使用Database方法获得我们的运营状态。

例子 (Example)

如果Invoice的状态为“待定”且创建日期为今天,我们将更新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());
      }
   }
}

我们将仅查看本教程中的Insert和Update操作。 其他操作与这些操作非常相似,我们在上一章中做了些什么。