软件开发中常用到数据库,而移动开发中sqlite3是最常用的,IOS早就支持了sqlite数据库。由于直接使用sqlite操作数据库不太方便,于是有了很多基于系统sqlite封装的第三方库,FMDB就是其中非常出色的一个,他使用起来灰常简单。下面是我的学习笔记,写在这里为初学者提供参考。
使用FMDB首先在工程中导入libsqlite3.dylib ,并把从网上下载的FMDB第三方库导入工程。
在AppDelegate.mm中导入FMDatabase.h ,一般建表的操作放在这里进行,而在程序的其他的地方对表的数据进行增(insert into)、删(delete)、改(update)、查(select)
首先确定存放数据库文件的目录
//数据库存放路径
NSArray *docdirArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [docdirArr objectAtIndex:0];//数组中只有一个元素
NSLog(@"path = %@",path);
NSString *dbPath = [NSString stringWithFormat:@"%@/test8.db",path];
NSSearchPathForDirectoriesInDomains 该方法是在沙盒中搜索当前工程目录的路径 ,根据参数的不同返回不同的目录;
参数 NSDocumentDirectory 返回Documents 路径;
创建数据库文件
FMDatabase *db = [[FMDatabase alloc]initWithPath:dbPath]; 或者用 FMDatabase *db =[FMDatabase databaseWithPath:dbPath];
但是调用完这两个方法都还没有真正创建数据库文件,只有当你打开一个数据库文件时,FMDB会先去设置的目录下查找需要打开的文件,如果文件存在就打开,如果文件不存在就创建数据库文件。打开数据库文件用下面的方法
if( [db open]) //如果打开或创建成功会进入if语句执行
{
在创建表的时候要先判断下该表是否已经存在,存在的话就不需要创建
if(! [db tableExists:tableName] )
{
//create your tables
建表的语句类似下面的:
[db executeUpdate:@"CREATE TABLE User (Name text ,Age integer ,ID integer primary key autoincrement)"];
}
[db close];
};
[db open];
增加数据
[db executeUpdate:@"INSERT INTO User (Name,Age) Values(?,?)" ,@"Kit", [NSNumber numberWithInt:20]];
[db executeUpdate:@"Insert into User (Name,Age) Values(?,?)" ,@"Jhon",[NSNumber numberWithInt:21]];
删除数据
[db executeUpdate:@"Delete From User where Name = ?",@"Jhon"];
修改数据
[db executeUpdate:@"Update User set Name = 'Abc' Where Name = 'kit'"];
查询数据
FMResultSet *result = [db executeQuery:@"select * from User" ];
while ([result next]) {
NSLog(@"Name = %@\nAge = %d\nID = %d\n",
[result stringForColumn:@"Name"],
[result intForColumn:@"Age"],
[result intForColumn:@"ID"]);
}
[db close];