SQLite是一种关系型数据库(也是目前移动客户端的主流数据库)
•实际上SQLite是无类型的,建表时声明或不声明类型都可以,也就意味着创表语句可以这么写:
create table t_student(name, age);
但为了保持良好的 规范,方便程序员之间的交流,编写建表语句的时候最好加上每个字段的具体类型
•在iOS中要使用SQLite3,需要添加库文件:libsqlite3.dylib并导入主头文件,这是一个C语言的库
2 // 提示:在自己开发中,不要用.db结尾的sqlite数据库文件名
3 NSString *dbPath = [@"readme.db" appendDocumentDir];
10 2) 如果数据库不存在,先创建数据库文件,再打开
14 if (SQLITE_OK == sqlite3_open([dbPath UTF8String], &_db)) {
- (void)execSQL:(NSString *)sql message:(NSString *)message
if (SQLITE_OK == sqlite3_exec(_db, [sql UTF8String], NULL, NULL, &errmsg)) {
NSLog(@"%@成功!", message);
NSLog(@"%@失败 - %s", message, errmsg);
1 // 1. 检查沙盒,判断数据库文件是否存在,如果存在就不再建表;
2 // 2. 数据库的方法:IF NOT EXISTS,放在表名之前即可
4 NSString *sql = @"CREATE TABLE IF NOT EXISTS T_Person (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT, gender INTEGER, age INTEGER, height REAL)";
6 [self execSQL:sql message:@"创建数据表"];
2 NSString *sql = [NSString stringWithFormat:@"INSERT INTO T_Person (name, gender, age, height) VALUES ('%@', %d, %d, %f)", person.name, person.gender, person.age, person.height];
4 [self execSQL:sql message:@"新增个人记录"];
2 - (void)updatePerson:(Person *)person{
5 NSString *sql = [NSString stringWithFormat:@"update t_Person set name = '%@' where id=%d",person.name,person.ID];
7 [self execSQL:sql msg:@"修改"];
2 - (void)removePerson:(NSInteger)personID{
5 NSString *sql = [NSString stringWithFormat:@"delete from t_Person where id=%d",personID];
7 [self execSQL:sql msg:@"删除"];
–sqlite3_prepare_v2检查sql的合法性
–sqlite3_coloum_xxx获取对应类型的内容
2 NSString *sql = @"SELECT id, name, age, gender, height FROM T_Person";
4 // 2. 查询语句通常是使用字符串拼接出来的
5 // 因此,在正常使用查询语句之前,需要检查SQL语句的语法正确!
6 sqlite3_stmt *stmt = NULL;
8 if (SQLITE_OK == sqlite3_prepare_v2(_db, [sql UTF8String], -1, &stmt, NULL)) {
11 // sqlite3_step 每次提取一条查询的记录行,不断重复,一直取到最后一条记录位置
12 while (SQLITE_ROW == sqlite3_step(stmt)) {
14 // iCol对应的就是SQL语句中字段的顺序,从0开始
15 // 根据实际查询字段的属性,使用sqlite3_column_xxx取得对应的内容即可
16 int ID = sqlite3_column_int(stmt, 0);
17 const unsigned char *name = sqlite3_column_text(stmt, 1);
18 int age = sqlite3_column_int(stmt, 2);
19 int gender = sqlite3_column_int(stmt, 3);
20 CGFloat height = sqlite3_column_double(stmt, 4);
22 // const unsigned char *直接输出看不出结果,需要转换
23 NSString *nameUTF8 = [NSString stringWithUTF8String:(const char *)name];
25 Person *p = [Person personWithID:ID name:nameUTF8 age:age gender:gender height:height];