RTDatabase(2) SQL篇

RTDatabase(1) 存储篇

开发中涉及到字符串时,总有让人头疼的时候。毕竟字符串没有智能提示,只能硬码或者copy。也出现过特别难debug的问题。
操作 sqlite3 时,无可避免的要编辑很多字符串,增加了字符串出错的风险。
RTDatabase 尝试降低操作 sql 字符串时的风险,使用链式编程给出了一种解决方案。

  1. 为什么采用链式?
    具体实现方式请参考Object-C OC 实现链式调用
    以查询表为例子。
// 假设数据库中有名为 Person 的一张表,表中包含名为 age 和 gender 的 column。
NSString *selectSql = @"SELECT age, gender FROM Person where age = 18 and gender = male";

可以将 selectSql分为 SELECTage, genderFROM Personwhere age = 18 and gender = male四段。除去SELECT其他三段在查询操作中都是可变的。
如果是在swift中完全可以写成:

"SELECT" + " age, gender" + " FROM" + " Person" + " WHERE" + " age = 18" + " and" + "gender = male"

而且可以将SQLite的命令字符串写成常量,最多是注意下空格的问题。
但是在OC中,没有这样便捷的 +语法来处理字符串。所以这种先拆分,后顺序拼接组装的操作,选择链式的理由还是充分的。

  1. 用法
    源码都在RTDatabase中的以PP开头的文件中。
- (PPSQL *(^)(NSString *))CREATE;
- (PPSQL *(^)(NSString *))INSERT;
- (PPSQL *(^)(NSString *))UPDATE;
- (PPSQL *(^)(NSString *))DELETE;
- (PPSQL *)SELECT;

首先需要选择主句,RTDatabase提供了建表,插入,更新,删除,查询五中主句。

- (PPSQL *(^)(PPSQLSubBlock))subs;
- (PPSQL *(^)(PPSQLTermBlock))terms;

并且视子句需求,选择调用subs 或者terms
subs主要在需要column相关限定的时候调用,比如selectSql中跟在 SELECT后的表示查询目标 column 的age, gender
terms则是在like、GLOB、group By、Limit、Order By、Where时调用。

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";
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容