salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)

salesforce中对于数据库操作和JAVA等语言对于数据库操作是有一定区别的。salesforce中的数据库使用的是Force.com 平台的数据库,数据表一行数据可以理解成一个sObject变量。接下来主要讲解一下sObject以及单表的简单DML操作。

详细了解sObject以及DML操作请参看官方PDF文档或查看下方链接进行参考:

https://developer.salesforce.com/trailhead/en/module/apex_database

一)sObject

通过上面的描述,可能很多人都会云里雾里,没有理解什么是sObject.看一下官方的定义:sObject指的是存储在Force.com 平台数据库中的任何的对象。sObject变量代表一行数据并且在Apex中只能使用SOAP API对象名称中声明的一行数据。比如在Force.com 数据库中有Account数据表,表相对应的API 名称为Account(图1),则

Account account1 = new Account();//account1则为一个sObject对象。

                          图1                              

                        图2

Force.com 平台数据库操作不像平时大家比较熟知的数据库,比如Oracle,SqlServer,MySql等。

当在salesforce中新建一个数据表时,操作步骤如下所示:

1.使用账号登录自己的salesforce主页,点击setup-->点击左侧Build-->点击Create-->点击Objects,或者在上方搜索栏直接搜索Objects(图2);

2.点击右侧主页面信息的New Custom Object;

3.在Label中输入要建立的数据库的名称,比如创建Student,则在Label中输入Student,鼠标指向Object Name 则自动填充Student,点击save按钮(图3);

4.创建Student表成功(图4),其API Name被平台自动设置为Student__c 。

                                                       图3

                                                                              图4

现在主要看一下图4,当Student表创建成功的时候,API Name 赋值为Student__c,这个则为Student表的sObject对象,即Student__c对象为Student表的一行记录的引用。当我想查询或者操作Student表数据时,可以通过Student__c对象操作。举个例子,当Student表中有一个Name字段时,其Name字段的API Name 为Name__c,则:

Student__c student = new Student__c();
student.Name__c = 'zero.zhang';
insert student;

通过上面三行代码则执行了student表一行数据的插入。相信通过上述例子大家对于sObject有了一个较好的了解。

既然了解了sObject是什么,如何操作,接下来考虑如何创建数据表中的列。创建数据表中的列通过如下步骤:

1)通过点击图2中的Objects,找到Label为Student的表,并点击进入(图5);

2)拖动到下方Custom Fields & Relationships模块点击new(图6),其中图6中上面Standard Fields为系统创建的列,详情参见官方文档;

3)选择Data Type,即数据列的类型,这些类型以后会单独讲解,选择Text类型,然后下一步;

4)Field Label 输入Name,鼠标移动到Field Name则自动输入Name,Length设置为50,(图7)接下来均为默认操作next,直到点击save按钮;

5)保存以后可以在Custom Fields & Relationships模块中看到新建的Name列,其API Name为Name__c(图8),如果想要建立多个列,请重复操作以上步骤。

                                                                                        图5

                                图6                            

                                         图7

                                  图8

二)SOQL

SOQL全称为Salesforce Object Query Language.通过SOQL语句可以操作sObject的增删改查等操作。下面还是以上面Student表进行举例。

Student表的API Name 为Student__c,所以在apex中,只要对Student__c对象进行相应的DML操作,即为对Student数据表操作。

注:apex代码通过操作表以及列对应的API Name来对表进行增删改查操作处理。

/*sObject有常用的两种初始化方式,第一种为常见的new
   第二种为new时将参数作为构造函数内容穿进去,多个参数使用','分隔    
*/
Student__c student1 = new Student(Name__c='student1');
Student__c student2 = new Student();
student2.Name__c = 'student2';

//增加一条学生记录--> insert
insert student1;//SOQL 增加记录的简便写法,同Database.insert(student1),详见文档
insert student2;
//修改一条学生记录--> update
student1.Name__c = 'student update';
update student1;//SOQL修改记录简便写法,同Database.update(student1)

/*增加或修改一条学生记录 upsert
upsert原理:upsert通过是否存在此ID来判断此条记录是否存在,
1.如果不存在此ID则执行insert操作;
2.如果存在并且只存在一个ID,则执行update操作;
3.存在并且存在多个ID,则抛出DMLException
*/
//当上方执行insert语句时,Id便赋予student1,所以下方代码执行update操作
student1.Name__c = 'student upsert';
upsert student1;//SOQL简便写法,同Database.upsert(student1);

//删除一条学生记录 delete
delete student2;//SOQL简便写法,同Database.delete(student2);

注意:进行DML 操作时有可能发生DMLException,所以在进行DML操作时最好进行try,catch处理。
eg:
try {
      insert student1;
} catch(DMLException e) {
      // TODO
} finally {
      // TODO
}

查询语句返回List<sObject>数据,查询语句也可以进行相应的复杂处理,例如进行where查询,include,exclude,limit等等操作,此部分内容太多,此篇只讲述最基本的查询操作,以后篇会详细探讨SOQL语句细节以及多表关联的查询等操作。

where语句中经常伴随着参数传递,比如查询学生表中姓名为zhangsan的个数等,如果采用拼串很容易造成错误,并且代码不易阅读。Apex提供了一种便捷的方式,使用 ':' 符号来声明查询语句中使用的变量,类似于Java中的PreparedStatement。

查询有两种方式,一种为通过[select ...]方式来进行查询,此种方式不利于SQL语句的拓展,故不推荐此种方式;

第二种方式为通过构造查询字符串,通过Database.query(queryString)方法来检索数据,此种方式灵活性扩展性强,推荐此种方式。

另外注意的是:在Force.com平台数据库中,查询不能使用'*'符号代表查询全部字段,如果查询全部字段需要全部列出来。

Student表表结构如下图所示,分为系统自定义的列以及用户自己声明的列。

查询语句例子如下:

//查询列表
String args1 = '%zhang%';
String args2 = 'zhangsan';
List<Student__c> students = [select Id,Name__c from Student__c where Name__c like :args1 limit 10000];//查询名称含zhang的学生列表
/*
上述语句等同与:
String query = 'select Id,Name__c from Student__c where Name__c like :args1 limit 10000';
List<Student__c> students = Database.query(query);
*/
//查询表数据条数
String countQuery = 'select count(Id) from Student__c where Name__c = :args2 ';//查询名称为zhangsan的学生个数
Integer studentsCount = Database.countQuery(countQuery);

注意:salesforce对查询记录条数以及DML操作次数均有严格的限制:查询条数一次不能超过50000条,DML操作一次不能超过10000次,如果超过限制则抛异常。如果需要大量的进行DML操作,请使用批处理方式进行数据处理。 

本篇所列出的SOQL操作只是冰山一角,SOQL在开发中所占比重很大,所以希望本篇起到抛砖引玉作用,供初学者入门。初学者如果想要深入详细了解此部分内容请详细查看官方文档进行学习sObject以及SOQL相关知识。如果对本篇内容描述有错误的地方,请及时指正,欢迎大家共同探讨,谢谢。下一篇将会讲解多表关联下的SOQL以及SOQL查询深入知识。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏MYSQL轻松学

MYSQL数据闪回方式

MYSQL官方截止目前还没有出来数据闪回特性,也许后续版本会出现。社区有一些开源工具可以使用,沿用的基本都是彭立勋最早提出的思路,利用binlog对SQL进行反...

3728
来自专栏hbbliyong

MySQL 8.0版本连接报错:Could not create connection to database server.

 准备搭建一个Spring Boot 组合mybatis的项目,数据库采用的是MySQL 8.0.11按照以往的配置,使用插件mybatis-generator...

562
来自专栏后台架构

Sphinx源码学习笔记(二):查询关键词

 继续上一篇索引创建流程完成,学习理解一下查询关键词的逻辑处理流程。

2596
来自专栏鸿的学习笔记

python源码阅读笔记之几个值得注意的点

772
来自专栏数据和云

oracle 12.2 local temp的原理和实现

从Oracle数据库12c开始,可以将Oracle Clusterware和Oracle RAC配置在大型集群中,称为Oracle Flex集群。 这些集群包含...

2839
来自专栏文渊之博

XML 在SQLServer中的使用

SQL Server对于XML支持的核心在于XML数据的格式,这种数据类型可以将XML的数据存储于数据库的对象中,比如variables, columns, a...

1747
来自专栏Java技术分享

SSM三大框架整合详细总结(Spring+SpringMVC+MyBatis)

使用 SSM ( Spring 、 SpringMVC 和 Mybatis )已经很久了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当...

1.1K12
来自专栏向治洪

Spring+SpringMVC+MyBatis整合

1、基本概念 1.1、Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在...

3596
来自专栏乐沙弥的世界

Oracle 基于备份控制文件的恢复(unsing backup controlfile)

    通常在当前控制文件丢失,或者当前的控制文件与需要恢复的控制文件不一致的情况下,我们需要重新创建一个控制文件或者使用 unsing backup cont...

632
来自专栏DOTNET

Entity Framework——并发策略

使用EF框架遇到并发时,一般采取乐观并发控制。 1支持并发检验 为支持并发检验,需要对实体进行额外的设置。默认情况下是不支持并发检验的。有以下两种方式: ...

3278

扫码关注云+社区