星空网 > 软件开发 > 操作系统

iOS数据库的基本使用

      今天总结下数据库的基本使用方法:

        iOS使用的数据库一般就是sqlite3,在使用该数据库前一定要先导入数据库框架,否则会出错,接下来引入头文件#import<sqlite3.h>   

在工程里创建一个Model类Student,一个数据库工具类DataBaseTool

     在Student.h中定义几条属性:

 

#import <Foundation/Foundation.h>

 

@interface Student : NSObject

 

@property(nonatomic,copy)NSString *name;

 

@property(nonatomic,copy)NSString *hobby;

 

@property(nonatomic,assign)NSInteger age;

 

@end

 

   DataBaseTool.h中对数据库操作方法的声明:

 

#import <Foundation/Foundation.h>

 

 #import <sqlite3.h>

 #import "Student.h"

 

@interface DataBaseTool : NSObject

 

{

 

    //用来保存数据库对象的地址

 

    sqlite3 *dbPoint;

 

}

 

//为了保证当前数据库在工程里是唯一的,我们用单例的方式创建一个数据库工具对象

 

+ (dataBaseTool *)shareDataBaseTool;

 

//打开数据库

 

- (void)openDB;

 

 //给数据库创建张表格,table

 

- (void)createTable;

 

 //插入一个学生信息

 

- (void)insertStu:(Student *)stu;

 

 //更新一个学生信息

 

- (void)updateStu:(Student *)stu;

//删除操作

 

 - (void)deletedateStu:(Student *)stu;

//查询操作

 

- (NSMutableArray *)selectAllStu;

 

 //关闭数据库

 

- (void)closeDB;

 

@end

     DataBaseTool.m中实现方法:

 

 

#import "dataBaseTool.h"

 

 @implementation dataBaseTool

 

+ (dataBaseTool *)shareDataBaseTool{

 

    static dataBaseTool *tool;

 

    static dispatch_once_t oneToken;

 

    dispatch_once(&oneToken, ^{

 

                tool=[[dataBaseTool alloc] init];

 

    });

 

    return tool;

 

}

 

- (void)openDB{

 

//数据库文件也保存在沙盒的documents文件里,所以先找沙盒路径

 

        NSArray *sandBox=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

 

    NSString *sandBoxPath=sandBox[0];

 

    //拼接文件路径,如果系统根据这个文件路径查找的时候有对应文件则直接打开数据库,如果没有则会创建一个相应的数据库

 

    NSString *documentPath=[sandBoxPath stringByAppendingPathComponent:@"Student.sqlite"];

 

    int result=sqlite3_open([documentPath UTF8String], &dbPoint);

 

    if (result==SQLITE_OK) {

 

        NSLog(@"数据库打开成功");

 

        NSLog(@"%@",documentPath);     

 

    }else{

                 NSLog(@"数据库打开失败");

    }   

 }

 

- (void)createTable{

 

//primary key 是主键的意思,主健在当前表里数据是唯一的,不能重复,可以唯一标识一条数据,一般是整数

 

    //autoincrement自增,为了让主键不重复,会让主键采用自增的方式

 

    //if not exists 如果没有表才会创建,防止重复创建覆盖之前数据

 

    //数据库问题90%是sql语句问题,所以先保证语句没问题,再放到工程里使用

 

    NSString *sqlStr=@" create table if not exists stu(number integer primary key autoincrement,name text,age integer,hobby text)";

 

    //执行这条sql语句

 

    int result=sqlite3_exec(dbPoint, [sqlStr UTF8String], nil, nil, nil);

 

    if (result==SQLITE_OK) {

 

                NSLog(@"表创建成功");

 

    }else{

        NSLog(@"表创建失败");

    }

}

 

- (void)insertStu:(Student *)stu{

 

    NSString *sqlStr=[NSString stringWithFormat:@"insert into stu (name,age,hobby) values ('%@','%ld','%@')",stu.name,stu.age,stu.hobby

 

];

 

    //执行sql语句

 

    int result=sqlite3_exec(dbPoint, [sqlStr UTF8String], nil, nil, nil);

 

    if (result==SQLITE_OK) {

 

        NSLog(@"添加学生成功");

 

    }else {

 

        NSLog(@"添加学生失败");

 

    }

 

}

 

- (void)updateStu:(Student *)stu{

 

     NSString *sqlStr= [NSString stringWithFormat:@"update stu set hobby='%@',age=%ld where name='%@'",stu.hobby,stu.age,stu.name];

 

    //执行sql语句

 

    int result=sqlite3_exec(dbPoint, [sqlStr UTF8String], nil, nil, nil);

 

    if (result==SQLITE_OK) {

 

        NSLog(@"更新成功");

 

    }else{

 

        NSLog(@"更新失败");

 

        NSLog(@"%d",result);

 

    } 

 

}

 

- (void)deletedateStu:(Student *)stu{

 

    NSString *sqlStr=[NSString stringWithFormat:@"delete from stu where name='%@'",stu.name];

 

    //执行sql语句

 

    int result=sqlite3_exec(dbPoint, [sqlStr UTF8String], nil, nil, nil);

 

    if (result==SQLITE_OK) {

 

                NSLog(@"删除成功");

 

    }else{

 

            NSLog(@"删除失败");

 

        }

 

}

 

- (NSMutableArray *)selectAllStu{

 

     //查询逻辑

 

    //1.先从本地的数据库中读取某张表里的所有数据

 

    //2.然后逐条进行读取,对model进行赋值

 

    //3.把已经赋值好得model放到数组中,并且返回

 

    NSString *sqlStr=@"select * from stu";

 

    //在语句里*是通配符的意思,通过一个*相当于代替了表里的所有的字段名

 

    //接下来需要定义一个跟随指针,它用来遍历数据库表中的每行数据

 

    //第三个参数:查询语句字数限制,-1是没有限制

 

    sqlite3_stmt *stmt=nil;

 

    int result=sqlite3_prepare_v2(dbPoint, [sqlStr UTF8String], -1, &stmt, nil);

 

    //这个方法相当于把数据库和跟随指针关联,一同完成查询功能

 

    //初始化一个用来装学生的数组

 

    NSMutableArray *stuArr=[NSMutableArray array];

 

    if (result==SQLITE_OK) {

 

                NSLog(@"查询成功");

 

        //开始遍历查询数据库的每一行数据

 

        while (sqlite3_step(stmt)==SQLITE_ROW) {

 

            //让跟随指针进行遍历查询,如果没有行,才会停止循环

 

            //满足条件,则逐列的读取内容

 

            //第二个参数表示当前这列数据在表的第几列

 

            const unsigned char *name=sqlite3_column_text(stmt, 1);

 

           int age=sqlite3_column_int(stmt, 2);

 

            const unsigned char *hobby=sqlite3_column_text(stmt,3);

 

            //把列里的数据再进行类型的转换

 

            NSInteger stuAge=age;

 

            NSString *stuName=[NSString stringWithUTF8String:(const char *)name];

 

            NSString *stuHobby=[NSString stringWithUTF8String:(const char *)hobby];

 

            //给对象赋值,然后把对象放到数组里

 

            Student *stu=[[Student alloc] init];

 

            stu.name=stuName;

 

            stu.hobby=stuHobby;

 

            stu.age=stuAge;

 

            [stuArr addObject:stu];

 

            [stu release];

 

        }

 

    }else{

 

        NSLog(@"查询失败");

 

        NSLog(@"%d",result);

 

    }

     return stuArr;

}

 

- (void)closeDB{    

 

    int result=sqlite3_close(dbPoint);

 

    if (result==SQLITE_OK) {

 

        NSLog(@"数据库关闭成功");

 

       // NSLog(@"%@",documentPath);

  

    }else{ 

        NSLog(@"数据库关闭失败");

    }

}

@end

 

 

 




原标题:iOS数据库的基本使用

关键词:IOS

IOS
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

卖家心声:平台转型独立站,我踩过的坑都成了脚下的路:https://www.kjdsnews.com/a/1550708.html
2023上半年中国游戏产业报告:https://www.kjdsnews.com/a/1550709.html
一键解决FP推广中的cloak难题:https://www.kjdsnews.com/a/1550710.html
跨境周报|Temu继续扩张,面临亚马逊和Shein夹击:https://www.kjdsnews.com/a/1550711.html
海外网红营销合作指南:详解海外合同与协议要点:https://www.kjdsnews.com/a/1550712.html
Facebook海外户服务商 - Facebook账号运营方式:https://www.kjdsnews.com/a/1550713.html
独家丨B站广告位可跳转美团APP B站为电商平台引流再升级 :https://www.kjdsnews.com/a/1836410.html
百崖大峡谷生态旅游景区(探秘中国西南自然风光):https://www.vstour.cn/a/363176.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流