首页 > 代码库 > ios数据库

ios数据库

#import <Foundation/Foundation.h>#import <sqlite3.h>#import "Student.h"@interface DataBaseHandler : NSObject{    // 添加一个成员变量  作用:指向本地的数据库文件,方便我们进行读写操作    sqlite3 *dbPoint;}// 把这个数据库处理类 写成一个单例// 单例方法的写法:  单例永远不会被释放 不可被改变// 1. 类方法(+)+(DataBaseHandler *)shareInstance;// 数据库的一些相关方法声明//打开数据库- (void)openDB;// 关闭数据库- (void)closeDB;// 创建表- (void)createTable;//insert-(void)insertStudent:(Student *)student;- (NSMutableArray *)selectAll;@end#import "DataBaseHandler.h"@implementation DataBaseHandler// 类方法的实现+ (DataBaseHandler *)shareInstance{    //创建一个静态指针, 只走一次这行代码    static DataBaseHandler *dataBase = nil;        if(dataBase == nil) {        // 如果指针为空, 说明这是第一次执行        dataBase = [[DataBaseHandler alloc] init];    }    return dataBase;}- (void)openDB{    // 打开数据库        // 相关函数        // 获取沙盒中documents文件夹    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];        // 拼接一个数据库文件路径    NSString *dbPath = [docPath stringByAppendingPathComponent:@"suibian.db"];    NSLog(@"%@", dbPath);        // 参数1: 数据库文件路径[dbPath UTF8String] 将oc字符串转为c的字符串;    // 参数2: 数据库的指针地址    // 作用: 1.去找文件路径下有没有相应的文件    //      2. 如果没有,创建一个数据库文件,打开    //     3. 如果有打开    int result = sqlite3_open([dbPath UTF8String], &dbPoint);    NSLog(@"结果: %d", result);}- (void)closeDB{    // 关闭数据库    sqlite3_close(dbPoint);}- (void)createTable{    // 创建一个表    // 执行sql语句的函数    // 参数1:数据库指针    // 参数2:sql语句    // 参数3: 回调函数        NSString *sql = @"create table student (name text,number integer primary key, sex text)";       int result = sqlite3_exec(dbPoint, [sql UTF8String], NULL, NULL, NULL);    NSLog(@"结果: %d", result);}- (void)insertStudent:(Student *)student{    NSString *sql = [NSString stringWithFormat:@"insert into student values (‘%@‘, %d, ‘%@‘)", student.name, student.number, student.sex];    int result = sqlite3_exec(dbPoint, [sql UTF8String], NULL, NULL, NULL);    NSLog(@"%d", result);}-(NSMutableArray *)selectAll{    // 搜索所有学生        NSMutableArray *allStu = [NSMutableArray array];        NSString *sql = @"select * from student";        // 1.设置一个数据库替身 也就是一个临时数据库 作用: 你对数据库的所有操作都暂时保存到替身中, 确认无误后,系统自动写到本地数据库    sqlite3_stmt *stmt = nil;        // 2.确认sql语句的重要性    // 参数1: 数据库指针    // 参数2: SQL语句    // 参数3: 控制sql的长度(-1:不控制长度)    // 参数4: 替身        // 作用:  1.检查sql语句的正却行    //       2.指定stmt为数据库的替身    int result = sqlite3_prepare_v2(dbPoint, [sql UTF8String], -1, &stmt, NULL);    if(result == 0) {        // sql确认无误,执行sql语句        while (sqlite3_step(stmt) == 0) {            // 如果数据库中有符合搜索条件的一行, 就进入while循环体                        // 按照列, 取得相应的值            // 获取第一列的值            // 参数1: 替身            // 参数2: 第几列            const unsigned char* nameChar = sqlite3_column_text(stmt, 0);            NSString *name = [NSString stringWithUTF8String:(const char*)nameChar];                        //获取第二列的值            int number = sqlite3_column_int(stmt, 1);                        // 获取第三列的值            NSString *sex = [NSString stringWithUTF8String:(const char*)sqlite3_column_text(stmt,  2)];                        Student *stu = [[Student alloc] init];            stu.name = name;            stu.number = number;            stu.sex = sex;                        [allStu addObject:stu];            [stu release];        }    }    // 将替身中的所有数据操作都写到本地数据库, 销毁替身;    sqlite3_finalize(stmt);        return allStu;}@end

 

ios数据库