一、常用方法
sqlite3 *db, 数据库句柄,跟文件句柄FILE很类似
sqlite3_stmt *stmt, 这个相当于ODBC的Command对象,用于保存编译好的SQL语句
sqlite3_open(), 打开数据库,没有数据库时创建。
sqlite3_exec(), 执行非查询的sql语句
Sqlite3_step(), 在调用sqlite3_prepare后,使用这个函数在记录集中移动。
Sqlite3_close(), 关闭数据库文件
还有一系列的函数,用于从记录集字段中获取数据,如
sqlite3_column_text(), 取text类型的数据。
sqlite3_column_blob(),取blob类型的数据
sqlite3_column_int(), 取int类型的数据
二、创建表
创建表的时候需要预处理和执行创建两个过程
执行创建的时多选择sqlite3_step
三、相关代码
1、打开或者创建数据库
sqlite3 *sqlDataBase; -(BOOL)createOrOpen:(NSString *)dbName { //获取用户域覆径信息 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; /** *Users/admin/Library/Application Support/iPhone Simulator/7.1/Applications/8E23557E-AAA6-471A-AAFE-E036BF1B7E4C/Library/Documentation *判断用户域是否有数据库dbNmae */ NSString *path = [documentsDirectory stringByAppendingPathComponent:dbName]; NSFileManager *fileManageer = [NSFileManager defaultManager]; //如果用户域内有该数据库,则返回yes,否则返回NO BOOL find = [fileManageer fileExistsAtPath:path]; if(find) //对找到进行处理,如果找到了,并且打开了,则返回yes { //打开该数据库,如果打开失败,则返回NO,否则返回yes if(sqlite3_open([path UTF8String], &sqlDataBase)!= SQLITE_OK) { //关闭sqlDataBase,实际是释放了它 sqlite3_close(sqlDataBase); return NO; } return YES; } NSLog(@"%d",sqlite3_open([path UTF8String], &sqlDataBase)); //创建数据库,创建返回yes,并且打开数据库,否则返回NO if(sqlite3_open([path UTF8String], &sqlDataBase)==SQLITE_OK) { return YES; }else { //关闭sqlDataBase,实际是释放了它 sqlite3_close(sqlDataBase); return NO; } return NO; }
2、插入数据
//向表中插入数据 -(void)insertMBkey:(NSString *)key { BOOL isOK = NO; sqlite3_stmt *statement; static char *sql = "INSERT INTO user VALUES ('1', 'Bill', '河南', 'ssss','2')"; int success = sqlite3_prepare_v2(sqlDataBase, sql, -1, &statement, NULL); if(success !=SQLITE_OK) { isOK = NO; }else { sqlite3_bind_text(statement, 1, [key UTF8String], -1, SQLITE_TRANSIENT); success = sqlite3_step(statement); sqlite3_finalize(statement); } if(success ==SQLITE_ERROR) { isOK = NO; }else { isOK=YES; } return; }
3、查询数据
//查询数据 -(void)GetList:(NSMutableArray *)KeysList { BOOL isOK = NO; sqlite3_stmt *statement; static char *sql = "select id,address from user"; int success = sqlite3_prepare_v2(sqlDataBase, sql, -1, &statement, NULL); if(success !=SQLITE_OK) { isOK = NO; }else { //查询结果集中一条一条地遍历所有记录,这里的数字对应的时列值 while (sqlite3_step(statement)==SQLITE_ROW) { int kid = sqlite3_column_int(statement, 0); char *key = (char *)sqlite3_column_text(statement, 1); UserInfo *userModel = [[UserInfo alloc] init]; userModel.userId =kid; if (key) { userModel.userAddress = [NSString stringWithUTF8String:key]; } [KeysList addObject:userModel]; sqlite3_finalize(statement); } NSLog(@"%@",KeysList); if(success==SQLITE_ERROR) { isOK = NO; }else { isOK = YES; } return; } }