我有一个很长的sqlite查询:

const char *sql_query = "SELECT statuses.word_id FROM lang1_words, statuses WHERE statuses.word_id = lang1_words.word_id ORDER BY lang1_words.word ASC";

我如何把它分成几行,让它更容易阅读? 如果我这样做:

const char *sql_query = "SELECT word_id
                        FROM table1, table2
                        WHERE table2.word_id = table1.word_id
                        ORDER BY table1.word ASC";

我得到一个错误。

是否有一种方法可以在多行中编写查询?


当前回答

另一种方法是使用任何工具来删除换行符。写你的字符串使用任何文本编辑器,一旦你完成,粘贴你的文本在这里,并复制它再次在xcode。

其他回答

有两种方法将字符串拆分为多行:

每个字符串在自己的行上。只适用于字符串: 纯C: char *my_string = "第一行" “第2行”; objective - c: NSString *my_string = @"Line1 " “么”;//第二个@是可选的 使用\ -可以用于任何表达式: 纯C: char *my_string = "第一行\ 第2行”; objective - c: NSString *my_string = @"Line1 \ . 么”;


第一种方法比较好,因为没有包含很多空白。然而,对于SQL查询,两者都是可能的。

注意:使用#define,你必须添加一个额外的\来连接两个字符串:

纯C:

#define kMyString "Line 1"\
                  "Line 2"

我一直都有这个问题,所以我做了一个小工具,将文本转换为一个转义的多行Objective-C字符串:

http://multilineobjc.herokuapp.com/

希望这能为您节省一些时间。

你还可以:

NSString * query = @"SELECT * FROM foo "
                   @"WHERE "
                     @"bar = 42 "
                     @"AND baz = datetime() "
                   @"ORDER BY fizbit ASC";

你可以用预处理器做一个小技巧。 它有潜在的缺点,它会破坏空白,并且可能会让阅读代码的人感到困惑。 但是,它也有好的一面,你不需要在里面转义引号字符。

#define QUOTE(...) #__VA_ARGS__
const char *sql_query = QUOTE(
    SELECT word_id
    FROM table1, table2
    WHERE table2.word_id = table1.word_id
    ORDER BY table1.word ASC
);

预处理器将其转换为:

const char *sql_query = "SELECT word_id FROM table1, table2 WHERE table2.word_id = table1.word_id ORDER BY table1.word ASC";

我在编写一些包含JSON的大字符串的单元测试时使用过这个技巧。这意味着我不必转义每一个引用字符\”。

另一种方法是使用任何工具来删除换行符。写你的字符串使用任何文本编辑器,一旦你完成,粘贴你的文本在这里,并复制它再次在xcode。