FMDB 插入数据报错

1、错误场景

FMDB 框架本身是一个简单易用的框架。

最近,在执行insert Sql 语句的时候经常报错。

特别是NSInterger的数据,在插入的时候容易入库失败。

2、错误分析

官方文档,对于基本数据的插入,单独写了一个示例部分。

明确指出,在执行insert 的SQL语句的时候,

NSInterger 需要是NSNumber对象插入。

3、解决方法——官方文档

官方示例代码:

NSInteger identifier = 42;

NSString *name = @"Liam O'Flaherty ("the famous Irish author")";

NSDate *date = [NSDate date];

NSString *comment = nil;

BOOL success = [db executeUpdate:@"INSERT INTO authors
(identifier, name, date, comment) VALUES (?, ?, ?, ?)",
@(identifier), name, date, comment ?: [NSNull null]];

if (!success) {
NSLog(@"error = %@", [db lastErrorMessage]);
}

官方解释:

Note: Fundamental data types, like the NSInteger variable 
identifier, should be as a NSNumber objects, achieved by 
using the @ syntax, shown above. Or you can use the 
[NSNumber numberWithInt:identifier] syntax, too.

Likewise, SQL NULL values should be inserted as [NSNull 
null]. For example, in the case of comment which might be 
nil (and is in this example), you can use the comment ?: 
[NSNull null] syntax, which will insert the string if 
comment is not nil, but will insert [NSNull null] if it is nil.

翻译成中文:

注意:基本数据类型,如NSInteger变量标识符,应该作为NSNumber对象,
实现使用@语法,如上所示。 或者你可以使用[NSNumber numberWithInt:
identifier]语法也是。

同样,SQL NULL值应该插入为[NSNull 空值]。 例如,在可能的评论的情况
下   nil(在这个例子中),你可以使用这个注释吗?[NSNull null]语法,
它将插入字符串if注释不为零,但如果为无,则将插入[NSNull null]。

小结

对于第三方库的使用,还是应该通读一下英文文档。即使读不懂,也可以避免走很多弯路。

2017年06月01日16:20:32

推荐阅读更多精彩内容