UISQLHanlder数据库的使用

作者: 无敌小阿铭 | 来源:发表于2016-07-02 14:53 被阅读68次

数据库

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

  • 单例的例子:
    • [NSFileManager defaultManager];
    • [UIScreen mainScreen];
    • [UIApplication sharedApplication];
    • [NSOperationQueue mainQueue];
      说完单例我们接下来说说今天的主题,数据库。
      数据库在我们做项目的时候经常会用到,我们经常会把来自网络的数据存到本地的数据库中。
      代码部分:😳
  • 首先我们要简单的了解sql语句,我们只说最基础的几个要是想说的话太复杂了一时间说不完😳
    常用的sql语句有以下几个:
    创建表的语句:
// 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

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

  • 创建一个数据库的类继承于NSObject 我这里命名为SQLHandler
  • 首先在SQLHandler.h文件中我们先搞些事情
  • 在SQLHandler.h文件中我们搞一个指针😳 并声明我们要用的方法详见代码
@interface SQLHandler : NSObject
{
    // 指向本地数据库的指针,保存的是数据库的内存地址.
    sqlite3 *DBPoint;
}
// 创建一个单例方法
// 单例方法一般都是 + 方法
+(SQLHandler *)shareInstance;

// 打开数据库方法
-(void)openDB;
// 关闭数据库方法
-(void)closeDB;
// 创建表的方法
-(void)createTable;
// 修改数据的方法
-(void)update;
// 插入数据的方法
-(void)insert:(Student *)stu;
// 查询所有数据的方法
-(NSArray *)selectedAll;
  • 然后到SQLHandler.m文件中搞事情😳
  • 创建一个单例方法
+(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(@"更新失败");
    }
    
}
  • 重点:实现查询方法,需要创建一个student类属性为数据库中要存的数据
-(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];

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

相关文章

  • UISQLHanlder数据库的使用

    数据库 今天给大家分享ios数据库的应用?说道数据库我们就要先说到单例,什么是单例呢???? 你猜我猜不猜你猜不猜...

  • 生物科研数据库使用教程

    TCGA数据库使用教程 Oncomine数据库使用教程 GEO数据库使用教程及在线数据分析工具 KEGG数据库使用...

  • 数据库基础:命令行脚本(数据表操作)

    查看所有数据库 show databases 使用数据库 use 数据库名 查看当前使用的数据库 select d...

  • 数据库连接池,wtforms的使用

    目录 数据库连接池pymsql链接数据库数据库连接池版 wtforms的使用使用1使用2 16.数据库连接池 py...

  • mongodb使用

    shell连接mongodb 创建数据库 查看当前使用的数据库 查看所有数据库 删除当前正在使用的数据库 查看当前...

  • Flask摆弄记录(3)-操作数据库

    连接和操作数据库的方法 使用数据库驱动直接连接,我使用的oralce数据库做一个应用或者建站总是要使用不同的数据库...

  • Head First Python 读书笔记(五)

    使用数据库 使用MySQL 8.0 Python与数据库交互时,使用DB-API,连接数据库的驱动程序,最后连接数...

  • 2018-10-25

    回顾:DML 数据库操纵语言 一、使用命令建立数据库或使用鼠标右键新建数据库 Create database数据库...

  • iOS数据库的基本使用

    今天总结下数据库的基本使用方法: iOS使用的数据库一般就是sqlite3,在使用该数据库前一定要先导入数据库框架...

  • Android数据库操作----Cursor

    Cursor 游标 Android使用的数据库是SQLite数据库,对于数据库记录的操作,可以使用Cursor来进...

网友评论

    本文标题:UISQLHanlder数据库的使用

    本文链接:https://www.haomeiwen.com/subject/rljqjttx.html