数据库
今天给大家分享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];
关于数据库的代码最基础的就这些了,希望能对宝宝们有一些帮助,本宝宝是程序猿一枚,想交流知识随时可以找我😳 本宝宝随时奉陪