Apex - Phương thức cơ sở dữ liệu

Phương thức lớp cơ sở dữ liệu là một cách khác để làm việc với các câu lệnh DML linh hoạt hơn các câu lệnh DML như chèn, cập nhật, v.v.

Sự khác biệt giữa phương thức cơ sở dữ liệu và câu lệnh DML

Tuyên bố DML Phương pháp cơ sở dữ liệu
Cập nhật một phần không được phép. Ví dụ: nếu bạn có 20 bản ghi trong danh sách, thì tất cả các bản ghi sẽ được cập nhật hoặc không có bản ghi nào. Cập nhật một phần được cho phép. Bạn có thể chỉ định Phương thức Tham số trong Cơ sở dữ liệu là true hoặc false, true để cho phép cập nhật một phần và false để không cho phép cập nhật tương tự.
Bạn không thể lấy danh sách các bản ghi thành công và thất bại. Bạn có thể lấy danh sách các bản ghi thành công và thất bại như chúng ta đã thấy trong ví dụ.
Example - chèn listName Example - Database.insert (listName, False), trong đó false cho biết rằng không được phép cập nhật một phần.

Chèn hoạt động

Việc chèn các bản ghi mới thông qua các phương thức cơ sở dữ liệu cũng khá đơn giản và linh hoạt. Chúng ta hãy xem xét kịch bản trước, trong đó, chúng ta đã chèn các bản ghi mới bằng cách sử dụng các câu lệnh DML. Chúng tôi sẽ chèn tương tự bằng cách sử dụng các phương pháp Cơ sở dữ liệu.

Thí dụ

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

Cập nhật hoạt động

Bây giờ chúng ta hãy xem xét ví dụ trường hợp kinh doanh của chúng ta bằng cách sử dụng các phương pháp cơ sở dữ liệu. Giả sử chúng ta cần cập nhật trường trạng thái của đối tượng Hóa đơn nhưng đồng thời, chúng ta cũng yêu cầu thông tin như trạng thái của bản ghi, id bản ghi không thành công, số lượng thành công, v.v. Điều này không thể thực hiện được bằng cách sử dụng Câu lệnh DML, do đó chúng ta phải sử dụng phương thức Cơ sở dữ liệu để có được tình trạng hoạt động của chúng tôi.

Thí dụ

Chúng tôi sẽ cập nhật trường 'Trạng thái' của Hóa đơn nếu nó ở trạng thái 'Đang chờ xử lý' và ngày tạo là hôm nay.

Đoạn mã được cung cấp bên dưới sẽ giúp cập nhật các bản ghi Hóa đơn bằng phương pháp Database.update. Ngoài ra, hãy tạo bản ghi Hóa đơn trước khi thực thi mã này.

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

Chúng tôi sẽ chỉ xem xét các thao tác Chèn và Cập nhật trong hướng dẫn này. Các thao tác khác khá giống với các thao tác này và những gì chúng ta đã làm trong chương trước.