ios开发时会经常用到数据库来存储一些数据,而系统自带的sqlite3较为繁琐,FMDB是对其的进一步封装,用起来很方便简洁。下边就是我要向大家介绍的FMDB的使用方法:
1.将FMDB的几个类导入工程(下边图片里面的这些类大家可以去网上下载)
2.导入libsqlite3.dylib框架
上边这两步就是是用FMDB的前期准备,下边我就带大家来学习工程中代码的实现:
1.首先在你想要实现数据库的代码的类中导入
#import "FMDatabase.h"
#import "FMDatabaseAdditions.h"
2.如果你有建好的数据库,那么将已有的数据库导入工程,在AppDelegate.m中将数据库拷贝到沙盒,拷贝之后,你每次对数据库的操作就是对沙盒文件中得数据库进行的操作
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//拷贝文件到沙盒文件
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)lastObject];
NSString *file = [pathstringByAppendingPathComponent:已有的数据库名字];
//若沙盒文件没有这个数据库则拷贝
if ([[NSFileManagerdefaultManager] fileExistsAtPath:file] ==FALSE)
{
//从工程中取出刚刚导入的数据库
NSString *fromFile = [[NSBundlemainBundle] pathForResource:已有的数据库名字ofType:nil];
[[NSFileManagerdefaultManager] copyItemAtPath:fromFiletoPath:file error:nil];
}else{
NSLog(@"文件存在");
}
}
3.如果没有数据库则新建一个数据库
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *database_path = [path stringByAppendingPathComponent:数据库的名字];
_db = [FMDatabase databaseWithPath:database_path];//从注意此时沙盒文件中若没有这个数据库则会新建一个
打开数据库
[_db open];
3.1创建表
if ([_db open]) {
NSString *createTable = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS '%@' ('%@' INTEGER PRIMARY KEY AUTOINCREMENT, '%@' TEXT, '%@' INTEGER, '%@' TEXT)",创建的表名,字段名1,字段名2,字段名3,字段名4];
BOOL res = [db executeUpdate:createTable];
if (!res) {
NSLog(@"创建表失败");
} else {
NSLog(@"创建表成功");
}
[_db close];
}
if ([_db open]) {
BOOL res = [_db executeUpdate:@"INSERT INTO createTable (字段名1,字段名2,字段名3,字段名4) VALUES(?,?,?,?)",字段名1值,字段名2值,字段名3值,字段名4值,nil];
if (!res) {
NSLog(@"数据插入失败");
}else{
NSLog(@"数据插入成功");
}
[_db close];
BOOL re = [_db executeUpdate:@"delete from createTable where 字段名(一般为主键id,根据自己的需要定义)= ?", 字段值];
if (re) {
NSLog(@"delete yes");
}else{
NSLog(@"delete no");
}
[_db close];
if ([_db open]) {
BOOL re = [[Singleton sharedSingleton].db executeUpdate:@"UPDATE createTable SET 字段名1(一般为主键id,根据自己的需要定义) = ? 字段名2(一般为要更新的字段) = ? ;",字段名1值,字段名2值];
if (re) {
NSLog(@"update yes");
}else{
NSLog(@"update no");
}
[_db close];
}
if ([_db open]) {
FMResultSet *rs = [_db executeQuery:@"SELECT * FROM createTable"];
while ([rs next]) {
NSInteger Id = [rs intForColumn:@"字段名1"];
NSString *name = [rs stringForColumn:@"字段名2"];
}
[_db close];
}