iOS开发代码段首页投稿(暂停使用,暂停投稿)复制粘贴

UISQLHanlder数据库的使用

2016-07-02  本文已影响68人  无敌小阿铭

数据库

今天给大家分享ios数据库的应用😳
说道数据库我们就要先说到单例,什么是单例呢???😳 你猜我猜不猜你猜不猜😂
好了,说正事,单例是ios中常用的一种设计模式,单例变量,简单的说就是在整个应用程序声明周期内只能有一个实例对象,这个对象只初始化一次,恩!差不多就这意思。。。
其实在ios程序开发中我们也有许多经常用到的单例。

// create table 表名(数据名 数据类型 设置主键, 数据名 数据类型)
create table student (id integer primary key, name text)

插入数据的语句:

// insert into 表名 values(上面创建表中数据按顺序给值)
insert into student values(1,'大宝宝');

删除数据的语句:

// delete from 表名 where 条件
delete from student where id = 1

更改数据的语句

update student set name='宇宙无敌超级大宝宝' where id=1

查询语句

// 查询表中的全部数据
select *from student

好,回到我们的开发代码当中

@interface SQLHandler : NSObject
{
    // 指向本地数据库的指针,保存的是数据库的内存地址.
    sqlite3 *DBPoint;
}
// 创建一个单例方法
// 单例方法一般都是 + 方法
+(SQLHandler *)shareInstance;

// 打开数据库方法
-(void)openDB;
// 关闭数据库方法
-(void)closeDB;
// 创建表的方法
-(void)createTable;
// 修改数据的方法
-(void)update;
// 插入数据的方法
-(void)insert:(Student *)stu;
// 查询所有数据的方法
-(NSArray *)selectedAll;
+(SQLHandler *)shareInstance {
    // 1.单例方法第一次调用,就会创建一个静态的指针变量,起始置空
    static SQLHandler *handler = nil;
    // 2.如果判断为空,说明是第一次执行,就创建对象。
    //   如果不为空,说明已经执行过,不要创建对象,可以直接使用
    if (handler == nil) {
        handler = [[SQLHandler alloc] init];
    }
    return handler;
}
// 获得documents文件夹地址,创建数据库文件地址
    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *dbPath = [docPath stringByAppendingString:@"/test.db"];
    
    // 参数1:数据库保存地址
    // 参数2:数据库指针地址
    int result = sqlite3_open([dbPath UTF8String], &DBPoint);
    NSLog(@"%d", result);
    
    if (result == SQLITE_OK) {
        NSLog(@"数据库打开成功, %@", dbPath);
    } else {
        NSLog(@"数据库打开失败");
        
    }
-(void)closeDB {
    
    int result = sqlite3_close(DBPoint);
    
    if (result == SQLITE_OK) {
        NSLog(@"数据库关闭成功");
    } else {
        NSLog(@"数据库关闭失败");
    }
}
-(void)createTable {
    
    // 创建表
    // 写sql语句
    NSString *sql = [NSString stringWithFormat:@"create table student (id integer primary key, name text)"];
    // 参数1:数据库指针地址
    // 参数2:sql语句
    int result = sqlite3_exec(DBPoint, [sql UTF8String], NULL, NULL, NULL);
    if (result == SQLITE_OK) {
        NSLog(@"创建表成功");
    } else {
        
        NSLog(@"创建表失败");
    }
    
}
-(void)insert:(Student *)stu {
    
    NSString *sql = [NSString stringWithFormat:@"insert into student values(%ld, '%@')", stu.Id, stu.name];
    int result = sqlite3_exec(DBPoint, [sql UTF8String], NULL, NULL, NULL);
    if (result == SQLITE_OK) {
        NSLog(@"插入成功");
    } else {
        
        NSLog(@"插入失败");
    }
    
}
-(void)delete {
    
    NSString *sql = [NSString stringWithFormat:@"delete from student where id=1"];
    
    int result = sqlite3_exec(DBPoint, [sql UTF8String], NULL, NULL, NULL);
    if (result == SQLITE_OK) {
        NSLog(@"删除成功");
    } else {
        NSLog(@"删除失败");
    }
    
}
-(void)update {
    
    
    NSString *sql = [NSString stringWithFormat:@"update student set name='大宝宝' where id=2"];
    
    int result = sqlite3_exec(DBPoint, [sql UTF8String], NULL, NULL, NULL);
    if (result == SQLITE_OK) {
        NSLog(@"更新成功");
    } else {
        
        NSLog(@"更新失败");
    }
    
}
-(NSArray *)selectedAll {
    
    // 1.创建一个状态指针
    // stmt相当于一个临时数据库,负责暂时保存sql执行的结果。在结束时集中对数据库进行写入
    sqlite3_stmt *stmt = nil;
    
    // 2.sql语句
    NSString *sql = @"select * from student";
    
    // 3.执行sql语句,检查sql格式,将结果保存到stmt指针中
    
    // 参数3:sql语句的长度限制,-1为不限制
    // 参数4:stmt指针的地址
    int result = sqlite3_prepare_v2(DBPoint, [sql UTF8String], -1, &stmt, NULL);
    
    // 创建一个空数组,为了稍后添加student对象
    NSMutableArray *stuArr = [NSMutableArray array];
    
    if (result == SQLITE_OK) {
        
        // sqlite3_step 每次执行都取出一行数据,直到最后一条数据为止。
        while (sqlite3_step(stmt) == SQLITE_ROW) {
            
            // 对每一行的数据进行分解,获取
            
            // 按列获取数据
            int Id = sqlite3_column_int(stmt, 0);
            
            const unsigned char *name = sqlite3_column_text(stmt, 1);
            
            // 使用上面的数据创建爱你student对象,放到数组中
            Student *stu = [[Student alloc] init];
            stu.Id = Id;
            stu.name = [NSString stringWithUTF8String:(char *)name];
            
            [stuArr addObject:stu];
        }
        
    }
    
    // 销毁stmt指针,回收内存,将变化写入本地数据库
    sqlite3_finalize(stmt);
    
    return [NSArray arrayWithArray:stuArr];
    
}

😳OK在SQLHanlder文件中搞完事情后我们就可以去我们的.ViewControll里去用我们的SQLHanlder类去调用我们的单例方法了,想其他的单例一样:[SQLHanlder shareInstance]

想要执行操作数据库只要调用方法就行了:

    [[SQLHandler shareInstance] openDB];
    
    [[SQLHandler shareInstance] createTable];
    
    Student *stu1 = [[Student alloc] init];
    stu1.name = @"宝宝";
    stu1.Id = 1;
    [[SQLHandler shareInstance] insert:stu1];
    
    Student *stu2 = [[Student alloc] init];
    stu2.name = @"大宝宝";
    stu2.Id = 2;
    [[SQLHandler shareInstance] insert:stu2];
    
    NSLog(@"%@", [[SQLHandler shareInstance]selectedAll]);
    
    
    [[SQLHandler shareInstance] update];

关于数据库的代码最基础的就这些了,希望能对宝宝们有一些帮助,本宝宝是程序猿一枚,想交流知识随时可以找我😳 本宝宝随时奉陪

上一篇下一篇

猜你喜欢

热点阅读