创建DataBaseHandle继承NSObject在DataBaseHandle.h中编写方法+ (DataBaseHandle *)sharedDataBaswHandle; //打开数据库- (void)openDB;//关闭数据库;- (void)closeDB;//创建表- (void)createTable;//插入一条数据- (void)insertName:(NSString *)namegender:(NSString *)genderage:(NSInteger)age;//通过UID更新一个数据-(void)updataWithUID:(NSInteger )uid;//通过UID删除一个数据-(void)deleteWithUID:(NSInteger)uid;//搜索全部-(void)searchAll;//根据name查询一条数据-(void)seaechWithName:(NSString *)name;在DataBaseHandle.m中@interface DataBaseHandle()//sqlite的头文件#import@interface DataBaseHandle() //documents文件夹下的一个叫做person.sqlite;@property (nonatomic,copy) NSString *dbPath;@endstatic DataBaseHandle *dataBase = nil;+ (DataBaseHandle *)sharedDataBaswHandle{ if (dataBase == nil) {dataBase = [[DataBaseHandle alloc]init];}return dataBase;}//懒加载:重写了属性的getter方法- (NSString *) dbPath{if (_dbPath == nil) {NSString *document = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];_dbPath = [document stringByAppendingPathComponent:@"person.sqlite"];}return _dbPath;}//初始化一个数据库static sqlite3 *db = nil;//打开数据库- (void)openDB{//打开数据库函数//在数据库里面 所有的字符串都要变成utf-8的编码格式int result = sqlite3_open(self.dbPath.UTF8String, &db);if (result == SQLITE_OK) {NSLog(@"打开成功");}else{NSLog(@"打开失败");}}//关闭数据库;- (void)closeDB{int result = sqlite3_close(db);if (result == SQLITE_OK) {NSLog(@"关闭成功");}else{NSLog(@"关闭失败");}}//创建表- (void)createTable{//创建一个person表 要求字段 UID integer 主键 自增 name text, gender text, age integerNSString *createString = @"create table if not exists person (uid integer primary key autoincrement not null, name text, gender text, age integer)";//第一个参数: 数据库//第二个参数: sql语句.要使用utf-8的格式//第三个参数: 结果的回调函数//第四个参数: 回调函数的参数//第五个参数: 错误信息int result = sqlite3_exec(db, createString.UTF8String, NULL, NULL, NULL);//判断是否创建成功if (result == SQLITE_OK ) {NSLog(@"创建成功");}else{NSLog(@"创建不成功");NSLog(@"%d",result);}//打印数据库地址NSLog(@"_dbpath == %@",_dbPath);}//插入一条数据- (void) insertName:(NSString *)name gender:(NSString *)gender age:(NSInteger)age{//插入数据的sql语句,数据不确定,所以在value里面使用 ? 代替,之后向里面绑定NSString *insertString = @"insert into person (name, gender, age) values (?, ?, ?)";//sqlite的伴随指针sqlite3_stmt *stmt = nil;//预执行sql语句//第一个参数: 数据库//第二个参数: sql语句//第三个参数: 如果为正, 例如 :1 表示再去参数的时候,只取一个字节;使用负数表示取值取到碰到结束符号('\000','u000'),//第四个参数: 伴随指针.会伴随着数据库的操作,获取值或者绑定值//第五个参数: 取值的时候如果取得不全,那么剩下的都存在这里面int result = sqlite3_prepare(db, insertString.UTF8String, -1, &stmt, NULL);//如果预执行成功的话,那么就要往里面放数据了if (result == SQLITE_OK) {//向预执行的sql语句里面插入参数 (取代 '?'的位置)//第一个参数 :伴随着指针//第二个参数: '?'的位置,从1开始//第三个参数: 插入的数据//第四个参数: 和上面的-1是一样的//第五个参数: 回调函数sqlite3_bind_text(stmt, 1, name.UTF8String, -1, NULL);sqlite3_bind_text(stmt, 2, gender.UTF8String, -1, NULL);sqlite3_bind_int64(stmt, 3, age);//sql语句已经全了//执行伴随指针,如果为SQLITE_DONE代表执行成功,并且成功的插入数据if (sqlite3_step(stmt) == SQLITE_DONE) {NSLog(@"插入成功");}}//一定要记得释放掉伴随指针sqlite3_finalize(stmt);}//更新数据- (void)updataWithUID:(NSInteger)uid{NSString *updateString = @"update person set name = '扫军' where uid = ?";//伴随指针sqlite3_stmt *stmt = nil;int result = sqlite3_prepare(db, updateString.UTF8String, -1, &stmt, NULL);if (result == SQLITE_OK) {sqlite3_bind_int64(stmt, 1, uid);if (sqlite3_step(stmt) == SQLITE_DONE) {NSLog(@"修改成功");}else{NSLog(@"修改失败");}}sqlite3_finalize(stmt);}//删除简单的操作方式- (void)deleteWithUID:(NSInteger)uid{NSString *deleyaString = [NSString stringWithFormat:@"delete from person where uid = %ld",uid];int result = sqlite3_exec(db, deleyaString.UTF8String, NULL, NULL, NULL);if (result == SQLITE_OK) {NSLog(@"删除成功");}else{NSLog(@"删除失败");}}//查找- (void)searchAll{NSString *searchString = @"select * from person";sqlite3_stmt *stmt = nil;int result = sqlite3_prepare(db, searchString.UTF8String, -1, &stmt, NULL);if (result == SQLITE_OK) {//sqlite3_step(stmt) == SQLITE_ROW 的时候,代表还有下一条数据while (sqlite3_step(stmt) == SQLITE_ROW) {//第二个参数: 表示参数的位置 , 从0 开始int uid = sqlite3_column_int(stmt, 0);NSLog(@"%d",uid);NSString *name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];NSLog( @"%@",name);NSString *gender = [NSString stringWithUTF8String:(const char *) sqlite3_column_text(stmt, 2)];NSLog(@"%@",gender);int age = sqlite3_column_int(stmt, 3);NSLog(@"%d",age);}}sqlite3_finalize(stmt);}