代码改变世界

iOS - 数据库SQLite基本操作

2015-08-18 20:48  HermitCarb  阅读(200)  评论(0编辑  收藏  举报

数据库操作几点建议:

  1. 注意sql执行语句的字符串的拼写。(一定要注意拼写,深受其害  T_T  )

  2. Obj-C中SQLite常用函数。

    (没几个,sqlite3_open,sqlite3_close,sqlite3_exec,sqlite3_perpare_v2,sqlite3_step,sqlite3_column_*,……)(外加两个对象:sqlite,sqlite_stmt)

  3. SQLite语法。(一般的数据库操作都一样)

  4. 如果做大一点的项目的话,数据库操作还是尽可能的封装吧。

  5. 善用搜索。(没少走弯路)

 

废话不多说,代码加注释:

 1     //数据库路径
 2     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
 3     NSString *documentsDir = [paths objectAtIndex:0];
 4     NSString *filePath = [documentsDir stringByAppendingPathComponent:@"test3.sqlite"];
 5 
 6 
 7     //打开数据库
 8     if (sqlite3_open([filePath UTF8String], &database) != SQLITE_OK)
 9     {
10         NSLog(@"打开数据库失败");
11         return nil;
12     }
13  
14     //数据执行操作封装,不想封装直接用sqlite3_exec函数
15     //sqlite3_exec返回枚举值(整形),可以执行创建表,插入,删除,更新等操作
16     - (int)execSql:(NSString*)sql
17     {
18         char *errmsg;
19         if (sqlite3_exec(database, [sql UTF8String], nil, nil, &errmsg) != SQLITE_OK) {
20             NSLog(@"数据库操作失败!");
21             NSLog(@"%s", errmsg);
22             return SQLITE_ERROR;
23         }
24         return SQLITE_OK;
25     }
26 
27 
28     //调用封装后的方法创建数据库
29     NSString *createTableHistory = @"create table if not exists atable(id integer primary key autoincrement, acolumn nvarchar(20) not null);";
30     [self execSql:createTableHistory];
31 
32 
33     //数据库查询,(可进一步封装)
34     thing = [[NSMutableArray alloc] init];
35     NSString *selectSql = @"select * from atable";
36     sqlite3_stmt *statement;
37     if (sqlite3_prepare_v2(database, [selectSql UTF8String], -1, &statement, nil) == SQLITE_OK) {
38         while (sqlite3_step(statement) == SQLITE_ROW) {
39             //nvarchar类型查询出来是char*,赋值给NSString的话需要转换,
40             //注意,这里是第1列,列数是从第0列开始的
41             //如果要查询多个字段,如学生信息,可以把学生封装成一个类,然后把该查询到的记录放到学生类的实例然后一个个放到数组里
42             [thing addObject:[NSString stringWithUTF8String:(char*)sqlite3_column_text(statement, 1)]];
43         }
44     }
45     else
46     {
47         NSLog(@"数据查询失败!");
48     }
49 
50 
51     //最后当页面关闭,或程序关闭记得关闭数据库
52     sqlite3_close(database);