FMDB: https://github.com/ccgus/fmdb
FMDB有三个主要的类
1.FMDatabase – 表示一个单独的SQLite数据库。 用来执行SQLite的命令。
2.FMResultSet – 表示FMDatabase执行查询后结果集
3.FMDatabaseQueue – 如果你想在多线程中执行多个查询或更新,你应该使用该类。这是线程安全的。
数据库创建
1.当数据库文件不存在时,fmdb会自己创建一个。
2. 如果你传入的参数是空串:@"" ,则fmdb会在临时文件目录下创建这个数据库,数据库断开连接时,数据库文件被删除。
3.如果你传入的参数是 NULL,则它会建立一个在内存中的数据库,数据库断开连接时,数据库文件被删除。
-
- (void)viewDidLoad { - [super viewDidLoad];
- //数据的路径,放在沙盒的cache下面
- NSString *cacheDir = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
- NSString *filePath = [cacheDir stringByAppendingPathComponent:@"contact.sqlite"];
- //创建并且打开一个数据库
- _db = [FMDatabase databaseWithPath:filePath];
- BOOL flag = [_db open];
- if (flag) {
- NSLog(@"数据库打开成功");
- }else{
- NSLog(@"数据库打开失败");
- }
- //创建表
- BOOL create = [_db executeUpdate:@"create table if not exists t_health(id integer primary key autoincrement, name text,phone text)"];
- if (create) {
- NSLog(@"创建表成功");
- }else{
- NSLog(@"创建表失败");
- }
- }
打开数据库:
[db open] |
关闭数据库:
[db close] |
执行更新:
一切不是SELECT命令的命令都视为更新。这包括 CREATE, UPDATE, INSERT,ALTER,COMMIT, BEGIN, DETACH, DELETE, DROP, END, EXPLAIN,
VACUUM, and REPLACE (等)。
简单来说,只要不是以SELECT开头的命令都是UPDATE命令。
执行更新返回一个BOOL值。YES表示执行成功,否则表示有那些错误 。你可以调用 -lastErrorMessage 和 -lastErrorCode方法来得到更多信息。
- - (IBAction)insert:(UIButton *)sender {
- BOOL insert = [_db executeUpdate:@"insert into t_health (name,phone) values(?,?)",@"jacob",@"138000000000"];
- if (insert) {
- NSLog(@"插入数据成功");
- }else{
- NSLog(@"插入数据失败");
- }
- }
- - (IBAction)delete:(UIButton *)sender {
- BOOL delete = [_db executeUpdate:@"delete from t_health where name like ?",@"jacob"];
- if (delete) {
- NSLog(@"删除数据成功");
- }else{
- NSLog(@"删除数据失败");
- }
- }
- - (IBAction)update:(UIButton *)sender {
- BOOL update = [_db executeUpdate:@"update t_health set name = ? where phone = '%@'",@"jacob111"];
- if (update) {
- NSLog(@"更新数据成功");
- }else{
- NSLog(@"更新数据失败");
- }
- }
执行查询:
SELECT命令就是查询,执行查询的方法是以 -excuteQuery开头的。
执行查询时,如果成功返回FMResultSet对象, 错误返回nil. 与执行更新相当,支持使用 NSError**参数。同时,你也可以使用 -lastErrorCode和-lastErrorMessage获知错误信息。
为了遍历查询结果,你可以使用while循环。你还需要知道怎么跳到下一个记录。使用FMDB,很简单实现,就像这样
- - (IBAction)select:(UIButton *)sender {
- FMResultSet *set = [_db executeQuery:@"select * from t_health "]; //* 代表查询整个表格的说有数据
- // @"select * from t_health WHERE name=@"jacob";" WHERE 后跟随查询条件
- // SELECT name FROM t_health; 此时查询到的数据只用name这一列的数据 电话不会出现在查询后的列表中
- //
- while ([set next]) {
- NSString *name = [set stringForColumn:@"name"];
- NSString *phone = [set stringForColumn:@"phone"];
- NSLog(@"name : %@ phone: %@",name,phone);
- }
- }
FMResultSet 提供了很多方法来获得所需的格式的值:
intForColumn:
longForColumn:
longLongIntForColumn:
boolForColumn:
doubleForColumn:
stringForColumn:
dataForColumn:
dataNoCopyForColumn:
UTF8StringForColumnIndex:
objectForColumn:
这些方法也都包括 {type}ForColumnIndex 的这样子的方法,参数是查询结果集的列的索引位置。