Dynamic SOQLでシングルクォートをエスケープする方法


  1. エスケープ文字を使用する方法: Dynamic SOQLクエリ内のシングルクォートをエスケープするには、バックスラッシュ(\)を使用します。例えば、\'はシングルクォートをエスケープするための方法です。以下に例を示します。
String searchString = 'It\'s a dynamic SOQL query.';
String query = 'SELECT Id FROM Object__c WHERE Name = \'' + searchString + '\'';
List<Object__c> records = Database.query(query);
  1. String.escapeSingleQuotesメソッドを使用する方法: ApexのStringクラスには、シングルクォートをエスケープするためのescapeSingleQuotesメソッドが用意されています。このメソッドを使用すると、文字列内のすべてのシングルクォートがエスケープされます。以下に例を示します。
String searchString = 'It\'s a dynamic SOQL query.';
String escapedString = String.escapeSingleQuotes(searchString);
String query = 'SELECT Id FROM Object__c WHERE Name = \'' + escapedString + '\'';
List<Object__c> records = Database.query(query);
  1. パラメータ化クエリを使用する方法: Dynamic SOQLでは、バインド変数を使用してクエリを構築することもできます。バインド変数を使用すると、シングルクォートのエスケープを意識する必要がなくなります。以下に例を示します。
String searchString = 'It\'s a dynamic SOQL query.';
List<Object__c> records = Database.query(
    'SELECT Id FROM Object__c WHERE Name = :searchString'
);

この方法では、バインド変数:searchStringに直接値をセットし、Apexランタイムが適切にエスケープしてくれます。

これらは、Dynamic SOQLでシングルクォートをエスケープするためのいくつかの一般的な方法です。適用する方法は、コードのコンテキストや要件によって異なる場合があります。