最近在做数据库的项目,iOS的 Sqlite3用起来太复杂了,为了减少开发时间,使用FMDB这个第三方库来实现数据库的相关操作。
FMDB 下载地址:https://github.com/ccgus/fmdb
推荐数据库查看工具 SQLiteManager (可直观的查看数据库表结构)下载地址: http://www.onlinedown.net/soft/175053.htm
SQL语句学习:http://www.cnblogs.com/wengzilin/archive/2012/03/27/2419851.html
1.打开/关闭 数据库
#import "FMDatabase.h" // 包含头文件
// 数据库文件路径
NSString *dbFilePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"temp.db"];
// 打开数据库
FMDatabase *db = [FMDatabase databaseWithPath:dbFilePath] ;
if (![db open]) {
NSLog(@"不能打开数据库");
}
// 关闭数据库
if (![db close]) {
NSLog(@"不能关闭数据库");
}
// 执行SQL语句,如果你已经对SQL语句很熟悉了,那么就不需要看下面的内容了
[self.db executeUpdate:<#SQL语句#>];
2. 创建表
iOS Sqlite3 FMDB 的 SQL语法创建表时候的一些关键字(注意书写的顺序,如果顺序不对可能会造成创建表的失败)
Primary Key: 主键,创建表的时候 在字段后面 + PRIMARY KEY
Auto Increment: 自动增加,创建表的时候 在字段后面 + AUTOINCREMENT
Not Null: 不允许为空,创建表的时候 在字段后面 + NOT NULL
Unique: 唯一,创建表的时候 在字段后面 + UNIQUE
Check: 约束,创建表的时候 在字段后面 + CHECK约束条件
Default: 默认值,创建表的时候 在字段后面 + DEFAULT值
Collate: 创建表的时候 在字段后面 + COLLATE
Foreign Key: 外键,创建表的时候 在后面 + ,CONSTRAINT
示例:
//建用户表 UserTable
[self.db executeUpdate:@"CREATE TABLE UserTable (\
user_id text PRIMARY KEY NOT NULL UNIQUE,\
user_name text\
)"];
// 创建行为表 ActionTable
[self.db executeUpdate:@"CREATE TABLE ActionTable (\
action_id integer PRIMARY KEY AUTOINCREMENT UNIQUE DEFAULT 1,\
type integer NOT NULL,\
description text NOT NULL,\
user_id text NOT NULL,\
CONSTRAINT user_id FOREIGN KEY(user_id) REFERENCES UserTable(user_id) ON DELETE CASCADE ON UPDATE CASCADE\
)"];
3.插入数据
[self.db executeUpdate:@"INSERT INTO UserTable (user_id, user_name) VALUES (?, ?)", @"123", @"LiuLiu"];
[self.db executeUpdate:@"INSERT INTO ActionTable (type, description, user_id) VALUES (?, ?, ?)", [NSNumber numberWithInt:1], @"123", @"我谁也不爱", @"123"];
4.删除数据
[self.db executeUpdate:@"DELETE FROM UserTable WHERE user_id = ?", @"123"];
5.更新数据
[self.db executeUpdate:@"UPDATE UserTable SET type = ? where user_id = ?", [NSNumber numberWithInt:0], @"123"];
6.查询数据
FMResultSet *rs = [self.db executeQuery:@"SELECT * FROM UserTable"];
while ([rs next]) {
NSLog(@"user_id = %@", [rs stringForColumn:@"user_id"]);
NSLog(@"type = %d", [rs intForColumn:@"type"]);
}