1

我从 2005 年开始阅读线程,人们说 SOQL 不支持字符串连接。

虽然想知道它是否受支持并且有人这样做了。

我正在尝试连接但没有运气:(

下面是尝试使用指定电子邮件查找记录的 APEX 代码。

String myEmail = 'my@email.com';
String foo = 'SELECT emailTo__c, source__c FROM EmailLog__c 
              WHERE source__c = \'' +
              myEmail + '\';

Database.query(foo)

即使记录确实在数据库中,它也不会查询任何内容。调试显示“row(0)”,表示返回空。

我在做 concat 错误的方式吗?

更新

我刚刚找到了一种不必添加单引号的方法。即使对于具有查询的字符串,也只需要应用相同的冒号变量。

String foo = DateTime.newInstance(......);

String bar = 'SELECT id FROM SomeObject__c WHERE createdOn__c = :foo';

List<SomeObject__c> result = Database.query(bar);

System.debug(result);

如果 WHERE 子句包含 DateTime,这也是必要的,因为 DateTime 不能用单引号引起来。

4

1 回答 1

4

为什么使用 Database.query()?如果您在括号中使用普通查询,事情会变得更简单和更快

[SELECT emailTo__c, source__c FROM EmailLog__c WHERE source__c = :myEmail]

更不用说参数绑定而不是字符串连接意味着无需担心 SQL 注入等。请考虑习惯括号中的这些查询,它们在开始时看起来很奇怪,但会多次节省您的屁股(输入错误的字段名称等)。

至于实际的连接 - 它就像你描述的那样工作,我只是不确定是否需要转义撇号。绑定变量是最安全的方法。

http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_dynamic_soql.htm http://www.salesforce.com/us/developer/docs/api/index_Left.htm#CSHID=sforce_api_calls_soql.htm |StartTopic=内容%2Fsforce_api_calls_soql.htm|SkinName=webhelp

于 2010-11-15T11:54:34.957 回答