sqlite3 使用
在iOS中使用SQLite3,首先要添加库文件libsqlite3.dylib和导入主头文件 创建、打开、关闭数据库创建或打开数据库 代码解析: 关闭数据库:sqlite3_close(db); 执行不返回数据的SQL语句 执行创表语句 代码解析: 带占位符插入数据 char *sql = "insert into t_person(name,age) values(?,?);"; 代码解析: sqlite3_bind_text():大部分绑定函数都只有3个参数 查询数据 char *sql = "select id,name,age from t_person;"; 使用实例 // // IWStudentTool.m // 02-SQLite的封装 // // Created by apple on 14-5-22. // #import "IWStudentTool.h" #import "IWStudent.h" #import <sqlite3.h> @implementation IWStudentTool // static的作用:能保证_db这个变量只被IWStudentTool.m直接访问 static sqlite3 *_db; + (void)initialize { // 0.获得沙盒中的数据库文件名 NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) lastObject] stringByAppendingPathComponent:@"student.sqlite"]; // 1.创建(打开)数据库(如果数据库文件不存在,会自动创建) int result = sqlite3_open(filename.UTF8String,&_db); if (result == SQLITE_OK) { NSLog(@"成功打开数据库"); // 2.创表 const char *sql = "create table if not exists t_student (id integer primary key autoincrement,age integer);"; char *errorMesg = NULL; int result = sqlite3_exec(_db,&errorMesg); if (result == SQLITE_OK) { NSLog(@"成功创建t_student表"); } else { NSLog(@"创建t_student表失败:%s",errorMesg); } } else { NSLog(@"打开数据库失败"); } } + (BOOL)addStudent:(IWStudent *)student { NSString *sql = [NSString stringWithFormat:@"insert into t_student (name,age) values('%@',%d);",student.name,student.age]; char *errorMesg = NULL; int result = sqlite3_exec(_db,sql.UTF8String,&errorMesg); return result == SQLITE_OK; } + (NSArray *)students { // 0.定义数组 NSMutableArray *students = nil; // 1.定义sql语句 const char *sql = "select id,age from t_student;"; // 2.定义一个stmt存放结果集 sqlite3_stmt *stmt = NULL; // 3.检测SQL语句的合法性 int result = sqlite3_prepare_v2(_db,NULL); if (result == SQLITE_OK) { NSLog(@"查询语句是合法的"); students = [NSMutableArray array]; // 4.执行SQL语句,从结果集中取出数据 while (sqlite3_step(stmt) == SQLITE_ROW) { // 真的查询到一行数据 // 获得这行对应的数据 IWStudent *student = [[IWStudent alloc] init]; // 获得第0列的id student.ID = sqlite3_column_int(stmt,0); // 获得第1列的name const unsigned char *sname = sqlite3_column_text(stmt,1); student.name = [NSString stringWithUTF8String:(const char *)sname]; // 获得第2列的age student.age = sqlite3_column_int(stmt,2); // 添加到数组 [students addObject:student]; } } else { NSLog(@"查询语句非合法"); } return students; } + (NSArray *)studentsWithCondition:(NSString *)condition { // 0.定义数组 NSMutableArray *students = nil; // 1.定义sql语句 const char *sql = "select id,age from t_student where name like ?;"; // 2.定义一个stmt存放结果集 sqlite3_stmt *stmt = NULL; // 3.检测SQL语句的合法性 int result = sqlite3_prepare_v2(_db,NULL); if (result == SQLITE_OK) { NSLog(@"查询语句是合法的"); students = [NSMutableArray array]; // 填补占位符的内容 NSString *newCondition = [NSString stringWithFormat:@"%%%@%%",condition]; // NSLog(@"%@",newCondition); sqlite3_bind_text(stmt,newCondition.UTF8String,NULL); // 4.执行SQL语句,从结果集中取出数据 while (sqlite3_step(stmt) == SQLITE_ROW) { // 真的查询到一行数据 // 获得这行对应的数据 IWStudent *student = [[IWStudent alloc] init]; // 获得第0列的id student.ID = sqlite3_column_int(stmt,2); // 添加到数组 [students addObject:student]; } } else { NSLog(@"查询语句非合法"); } return students; } @end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |