分享

iOS SOLite3

 叹落花 2015-03-26

3.2                                          

创建数据库(sqlite3_opendb)

复制代码
 1 // 设置沙盒中的文件路径
 2     // 提示:在自己开发中,不要用.db结尾的sqlite数据库文件名
 3     NSString *dbPath = [@"readme.db" appendDocumentDir];
 4     NSLog(@"%@", dbPath);
 5     
 6     /**
 7      sqlite3_open
 8      
 9      1) 如果数据库存在,直接打开
10      2) 如果数据库不存在,先创建数据库文件,再打开
11      */
12     _db = NULL;
13     
14     if (SQLITE_OK == sqlite3_open([dbPath UTF8String], &_db)) {
15         NSLog(@"数据库打开成功");
16     } else {
17         NSLog(@"数据库打开失败");
18     }
复制代码

 

 

3.3                                            

1.单步执行操作(sqlite3_exec)
复制代码
#pragma mark 单步执行SQL
- (void)execSQL:(NSString *)sql message:(NSString *)message
{
    // 执行SQL语句

    char *errmsg = NULL;
    if (SQLITE_OK == sqlite3_exec(_db, [sql UTF8String], NULL, NULL, &errmsg)) {
        NSLog(@"%@成功!", message);
    } else {
        // C语言中字符串输出应该用%s
        NSLog(@"%@失败 - %s", message, errmsg);
    }
}
复制代码

 

2.创建数据表
1     // 1. 检查沙盒,判断数据库文件是否存在,如果存在就不再建表;
2     // 2. 数据库的方法:IF NOT EXISTS,放在表名之前即可
3     // 定义SQL语句
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)";
5 
6     [self execSQL:sql message:@"创建数据表"];

 

4.插入数据
1     // 1. SQL
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];
3     
4     [self execSQL:sql message:@"新增个人记录"];

 

5.更新数据
复制代码
1 //修改
2 - (void)updatePerson:(Person *)person{
3     
4     
5     NSString *sql = [NSString stringWithFormat:@"update t_Person set name = '%@' where id=%d",person.name,person.ID];
6     
7     [self execSQL:sql msg:@"修改"];
8 
9 }
复制代码

 

6.删除数据
复制代码
1 //删除
2 - (void)removePerson:(NSInteger)personID{
3     
4     
5     NSString *sql = [NSString stringWithFormat:@"delete from t_Person where id=%d",personID];
6     
7     [self execSQL:sql msg:@"删除"];
8 
9 }
复制代码

 

7.查询操作
sqlite3_prepare_v2检查sql的合法性
sqlite3_step逐行获取查询结果
sqlite3_coloum_xxx获取对应类型的内容
sqlite3_finalize释放stmt
复制代码
 1  // 1. SQL
 2     NSString *sql = @"SELECT id, name, age, gender, height FROM T_Person";
 3     
 4     // 2. 查询语句通常是使用字符串拼接出来的
 5     // 因此,在正常使用查询语句之前,需要检查SQL语句的语法正确!
 6     sqlite3_stmt *stmt = NULL;
 7     
 8     if (SQLITE_OK == sqlite3_prepare_v2(_db, [sql UTF8String], -1, &stmt, NULL)) {
 9         NSLog(@"语法正确");
10         // 利用句柄,逐一查询符合条件的数据
11         // sqlite3_step 每次提取一条查询的记录行,不断重复,一直取到最后一条记录位置
12         while (SQLITE_ROW == sqlite3_step(stmt)) {
13             // 取到行信息,逐一获取每一列的内容
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);
21             
22             // const unsigned char *直接输出看不出结果,需要转换
23             NSString *nameUTF8 = [NSString stringWithUTF8String:(const char *)name];
24             
25             Person *p = [Person personWithID:ID name:nameUTF8 age:age gender:gender height:height];
26             
27             NSLog(@"%@", p);
28         }
29     } else {
30         NSLog(@"语法错误");
31     }
复制代码

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多