阅读本教程前,建议先阅读iOS/macOS使用教程 和 。
错误处理
WCDB可以对所有错误进行统一的监控,也可以获取某个特定操作的错误信息。所有错误都以的形式出现。
WCTError
继承自NSError
,包含了WCDB错误的所有信息,以供调试或发现问题。
表示错误的类型,不同类型的错误其错误码和拥有的信息不同。其对应关系如下
其他错误信息通过infoForKey
接口获得,包括:
- Tag,正在操作的数据库的tag
- Operation,正在进行的操作,请参考
- Message,错误信息
- SQL,发生错误时正在执行的SQL
- Path,发生错误时正在操作的文件的路径。
开发者也可以注册全局的错误接口,以调试、上报、打log
- //Error Monitor
- [WCTStatistics SetGlobalErrorReport:^(WCTError *error) {
- NSLog(@"[WCDB]%@", error);
- }];
性能监控
WCDB支持获取单次操作的耗时,也支持对单个DB或全局注册统一接口监控性能。
所有性能监控都会有少量的性能损坏,请根据需求开启。
由于便捷接口的设计原则是易用,因此不提供获取错误的方式。操作耗时需使用链式接口。
首先安通过setStatisticsEnabled:
打开耗时监控
- NSArray<Message *> *objects = [[[select where:Message.localID > 0]
- orderBy:Message.createTime.order()]
- limit:10].allObjects;
- NSLog(@"%f", select.cost);//You should call this after all other operations.
WCDB支持对所有SQL操作进行全局监控,也支持监控单个特定的数据库。
所有监控的返回数据都相同,包括三个数据:
- sqls,执行的SQL和对应的次数。
- 对于非事务操作,则为单条SQL
- 对于事务操作,则为该次事务所执行的所有SQL和每个sql执行的次数
- cost,耗时
监控所有db的数据库操作耗时,该接口需要在所有db打开、操作之前调用。
特定数据库监控
对于特定的数据库,该接口会覆盖全局监控的注册。
- [db setTrace:^(WCTTag tag, NSDictionary<NSString *, NSNumber *> *sqls, NSInteger cost) {
- NSLog(@"Tag: %d", tag);
- [sqls enumerateKeysAndObjectsUsingBlock:^(NSString *sql, NSNumber *count, BOOL *) {
- NSLog(@"SQL: %@ Count: %d", sql, count.intValue);
- }];
- NSLog(@"Total cost %ld nanoseconds", (long) cost);
- }];
- 监控耗时仅包括SQL在SQLite层面的耗时,包括SQL的编译、I/O等。而操作耗时除以上之外,还包括了WCDB层面对类封装等产生的耗时
SQL执行监控
WCDB可以监控所有SQL的执行,以确定代码符合预期