開發(fā)中涉及到字符串時(shí)腊嗡,總有讓人頭疼的時(shí)候。畢竟字符串沒有智能提示拾酝,只能硬碼或者copy燕少。也出現(xiàn)過特別難debug的問題。
操作 sqlite3
時(shí)蒿囤,無可避免的要編輯很多字符串客们,增加了字符串出錯(cuò)的風(fēng)險(xiǎn)。
RTDatabase
嘗試降低操作 sql 字符串時(shí)的風(fēng)險(xiǎn)蟋软,使用鏈?zhǔn)骄幊探o出了一種解決方案镶摘。
- gitHub 源碼:RTDatabase
- 為什么采用鏈?zhǔn)剑?br>
具體實(shí)現(xiàn)方式請參考Object-C OC 實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用嗽桩。
以查詢表為例子岳守。
// 假設(shè)數(shù)據(jù)庫中有名為 Person 的一張表,表中包含名為 age 和 gender 的 column碌冶。
NSString *selectSql = @"SELECT age, gender FROM Person where age = 18 and gender = male";
可以將 selectSql
分為 SELECT
湿痢、age, gender
、FROM Person
扑庞、where age = 18 and gender = male
四段譬重。除去SELECT
其他三段在查詢操作中都是可變的。
如果是在swift
中完全可以寫成:
"SELECT" + " age, gender" + " FROM" + " Person" + " WHERE" + " age = 18" + " and" + "gender = male"
而且可以將SQLite的命令字符串寫成常量罐氨,最多是注意下空格的問題臀规。
但是在OC中,沒有這樣便捷的 +
語法來處理字符串栅隐。所以這種先拆分塔嬉,后順序拼接組裝的操作玩徊,選擇鏈?zhǔn)降睦碛蛇€是充分的。
- 用法
源碼都在RTDatabase中的以PP開頭的文件中谨究。
- (PPSQL *(^)(NSString *))CREATE;
- (PPSQL *(^)(NSString *))INSERT;
- (PPSQL *(^)(NSString *))UPDATE;
- (PPSQL *(^)(NSString *))DELETE;
- (PPSQL *)SELECT;
首先需要選擇主句恩袱,RTDatabase
提供了建表,插入胶哲,更新畔塔,刪除,查詢五中主句鸯屿。
- (PPSQL *(^)(PPSQLSubBlock))subs;
- (PPSQL *(^)(PPSQLTermBlock))terms;
并且視子句需求澈吨,選擇調(diào)用subs
或者terms
。
subs
主要在需要column
相關(guān)限定的時(shí)候調(diào)用碾盟,比如selectSql
中跟在 SELECT
后的表示查詢目標(biāo) column 的age, gender
棚辽。
terms
則是在like、GLOB冰肴、group By屈藐、Limit、Order By熙尉、Where
時(shí)調(diào)用联逻。
PPSQL *pp = [[PPSQL alloc] init];
NSString *sql = pp.SELECT.subs(^(id<PPSQLProtocol> sub) {
sub.column(@"age").column(@"gender").from(@"Person");
}).terms(^(PPTerm *term) {
term.where.equal(@"age", @(18)).equal(@"gender", @"male");
}).build;
-> sql = @"SELECT age, gender FROM Person where age = 18 and gender = male";