一、关于使用第三方库 -- FMDatabase --进行数据库操作(可以参考自己项目:69-74天-项目实战--新闻客户端)
说明一:
1:FMDatabase只用于sqlite。
2:需要导入 libsqlite3.dylib库
3:假如查询的是整个表,那么我们可以使用以下语句来获得列的值。下面的new是一个对象,有着和表的列对应的属性名称。
//查询本地数据库
FMResultSet * rs = [dbexecuteQuery:@"select * from news"];
//遍历本地循环
while ([rsnext]) {
YZBNews * new = [[YZBNewsalloc]init];
new.title = [rsstringForColumn:@"title"];
}
4:当我们需要插入数据的时候,不要用下面 1) 的写法,因为这样数据库会认为没有带单引号,所以是插入失败的。应该使用 2) 的方式。
1)NSString * sql =[NSString stringWithFormat:@"insert into messages values(%@, %@, %@, %d)",uname, strDate, body, 0] ;
[self.db executeUpdate:sql];
2) BOOL b = [self.db executeUpdate:@"insert into messages values(?, ?,?, ?)",uname, strDate, body, @"0"];
3:操作步骤大致如下:
//使用第三方操作数据库 --生成sqlite数据库
NSArray * paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString * path = paths[0];
path = [pathstringByAppendingPathComponent:@"news.db"];
NSLog(@"%@", path);
self.db = [FMDatabasedatabaseWithPath:path];
BOOL b = [self.dbopen];
//数据库打开失败就提示
if (!b) {
[YZBAlertshowAlert:self.window.rootViewController :@"数据库打开失败"];
returnNO;
}
//创建数据库表
NSString * sql =@"create table if not exists news(idid integer, title text, subtitle text, picture text, content text, author text, flid integer, time text, clicks integer, pic blob)";
b = [self.dbexecuteUpdate:sql];
if (!b) {
[YZBAlertshowAlert:self.window.rootViewController :@"创建news表失败" ];
}