IOS SqlLite3数据库

来源:互联网 发布:布谷布谷软件 编辑:程序博客网 时间:2024/05/23 02:00

ios数据库操作 : 利用单例对数据库进行管理
数据库操作: 创建数据库 创建表 关闭数据库 增 删 改 查 操作

// 初始化单例方法   在单例中进行初始化+ (SqlLiteManger *)shareManger;// 如果要使用数据库  需要引用一个框架    // 引入一个libsqlite3.0框架  引入头文件  sqlite3.h// 数据库操作第一步  打开  数据库- (sqlite3 *)openDB;//  数据库  关闭- (void)closeDB;// 数据库 创建表- (void)createTable;// 数据库插入操作  StudentModel 是一个model类- (void)insertInto:(StudentModel *)student;// 删除   根据条件删除- (void)deleStudentWithAge:(NSInteger)age;// 修改   - (void)updataName:(NSString *)name setAge:(NSInteger)age;// 查询  分为单条查询  和  多条查询- (StudentModel *)selectName:(NSString *)name andAge:(NSInteger)age;// 查询全部- (NSArray *)selectAllStudent;

实现初始化方法 在初始化之前需要理解 ios中sqlLite3 的语句 在这最容易出现问题的就是sql语句

// 初始化  单例方法+ (SqlLiteManger *)sharManger{   static  SqlLiteManger *man = nil;   if (man == nil) {   man = [[SqlLiteManger alloc]init];   }return man;}// 数据库操作之前需要  先定义个 指针   用来负责连接数据库  能够保证数据库从开始到结束都能够使用  在关闭的时候释放// 创建连接数据库的指针static sqlite3 *db = nil;// 打开数据库- (sqlite3 *)openDB{   if (db != nil) {       return db;   }// 不存在就去创建一个数据库  先找到存放数据库的位置NSString *document = [NSSearchPathForDirectoriesInDocument(NSDocumentDirectory, NSUserDomainMask, YES)lastobject];// 在document 文件夹下面添加数据库文件NSString  *path = [document stringByAppendPathCompoent:@"Student.sqlite"];//  创建数据库  int result = sqlite3_open(path.UTF8String, &db); if (result == SQLITE_OK) {      NSLog(@"数据库创建成功");  } else     {       NSLog(@"数据库创建失败");     }     return db;}// 关闭数据库- (void)closeDB{   int result = sqlite3_close(db);   if (result == SQLITE_OK) {       NSLog(@"关闭成功");       //  如果关闭成功  就把数据库置为空  下次操作的时候  再次创建       db = nil;     } else      {        NSLog(@"关闭失败");     }}

操作数据库步骤大致有以下几步:
1 打开数据库
2 写sql语句
3 执行sql语句
4 判断sql语句 是否成功
5 关闭数据库

// 创建数据库表- (void)createTable {    db = [self openDB];    NSString sql = @"create table IF NOT EXISTS LanStudent(number integer primary key not NULL, name text not NULL, gender text not NULL, age integer not NULL);";int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL);if (result == SQLITE_OK) {  NSLog(@"创建成功");    } else    {      NSLog(@"创建失败");    }    [self closeDB]; }

// 插入(增加)

- (void)insertInto:(StudentModel *)student {    db = [self openDB];NSString *sql = [NSString stingWithFormat:@"insert into LanStudent(number, name, gender, age) values('%ld', '%@', '%@', '%ld');", student.number, student.name, student.gender, student.age];int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL);if (result == SQLITE_OK) {    NSLog(@"插入成功");} else {    NSLog(@"插入失败"); }[self closeDB];}

// 删除

- (void)deleStudentWithAge:(NSInteger)age{    db= [self openDB];    NSString *sql = [NSString stringWithFormat:@"delete from LanStudent where age > '%ld'", age];    int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL);    if (result == SQLITE_OK) {        NSLog(@"删除成功");    } else    {        NSLog(@"删除失败");    }    [self closeDB];}

// 更改

//  更新数据库- (void)updataName:(NSString *)name setAge:(NSInteger)age{    db = [self openDB];    NSString *sql = [NSString stringWithFormat:@"update LanStudent set age = '%ld' where name = '%@'", age, name];    int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL);    if (result == SQLITE_OK) {        NSLog(@"更改成功");    } else    {        NSLog(@"更改失败");    }    [self closeDB];}

// 查询

// 查询操作比其他的操作复杂 // 单条查询- (StudentModel *)selectName andAge:(NSInteger)age {    db = [self openDB];    NSString *sql = [NSString stringWithFormat:@"select * from LanStudent where name = @'%@' and age = '%ld'", name, age]; // 创建一个  跟随指针  用来保存sql语句sqlite3_stmt *stmt = nil;int result = sqlit3_prepare_v2(db, sql.UTF8Strig, -1, &stmt, NULL);if(result == SQLITE_OK) {   NSLog(@"成功");  sqlite3_bind_text(stmt, 1, name.UFT8String, -1, NULL);// 参数2 查询条件的顺序 // 参数3 查询条件的字段名称  需要转换为c 语言格式 // 参数4 长度 -1// 参数5 绑定后执行的函数  一般写 NULLsqlite3_bind_int(stmt,2, -1);// 开始查询while (sqlite3_step(stmt) == SQLITE_ROW) {    char *name = (char *)sqlite3_column_text(stmt, 1);    char *gender = (char *)sqlite3_column_text(stmt, 2);    int age = sqlite3_column_int(stmt, 3);    int number = sqlite3_column_int(stmt, 0);//  给model赋值StudentModel *model = [[StudentModel alloc]init];model.name = [NSString stringWithUTF8String:name];model.gender = [NSString stringWithUTF8String;gender];model.age = age;model.number = number;//  释放跟随指针sqlite3_finalize(stmt);//  关闭数据库[self closeDB];// 返回数据  并且释放对象[self closeDB];return [model autorelease];}  } else     {       NSLog(@"失败");    }[self closeDB];return nil;}

// 查询全部

//  查询所有- (NSArray *)selectAllStudent{    // 1    db = [self openDB];    // 2    NSString *sql = [NSString stringWithFormat:@"select * from LanOuStudent"];    // 3 创建一个跟随指针    sqlite3_stmt *stmt = nil;    // 4 运行    int result = sqlite3_prepare_v2(db, sql.UTF8String, -1, &stmt, NULL);    // 5    if (result == SQLITE_OK) {        NSLog(@"查询成功");        //6  不用绑定 改成创建一个数组  用来保存  查询好的model        NSMutableArray *array = [NSMutableArray array];        // 7 开始查询        while (sqlite3_step(stmt) == SQLITE_ROW) {          // 8 读取数据            char *name = (char *)sqlite3_column_text(stmt, 1);            char *gender = (char *)sqlite3_column_text(stmt, 2);            int age = sqlite3_column_int(stmt, 3);            int number =sqlite3_column_int(stmt, 0);            // 9 给model赋值            LanOuStudent *model = [[LanOuStudent alloc]init];            model.name = [NSString stringWithUTF8String:name];            model.gender = [NSString stringWithUTF8String:gender];            model.age = age;            model.number = number;            // 10 把model 放到数组里面            [array addObject:model];            // 11 释放学生对象            [model release];            }        // 12 释放跟谁指针        sqlite3_finalize(stmt);        // 13 关闭数据库        [self closeDB];        // 14 返回数组        return array;    } else    {        NSLog(@"查询失败");    }    // 16    [self closeDB];    return  nil;}
1 0
原创粉丝点击