我读过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)”表示返回空。
我做错了吗?
更新
我刚发现一种不必添加单引号的方法。即使对于有查询的String,也只需要应用相同的冒号变量。
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不能用单引号括起来。
答案 0 :(得分:4)
为什么使用Database.query()?如果你在括号中使用普通查询
,那么东西会更简单,更快捷 [SELECT emailTo__c, source__c FROM EmailLog__c WHERE source__c = :myEmail]
更不用说参数绑定而不是字符串连接意味着无需担心SQL注入等。请考虑习惯于在括号中使用这些查询,它们在beginnign中看起来很奇怪,但会多次保存你的屁股(错误的字段名称)等)。
至于实际的连接 - 它就像你描述的那样,我只是不确定是否需要转义撇号。绑定变量是最安全的方法。
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=Content%2Fsforce_api_calls_soql.htm|SkinName=webhelp