iOS开发之数据库的简单使用
数据库基础知识:
plist:writetoFile,条件:只有一个对象拥有这个方法,才能使用plist存储,而且自定义对象不能用plist存储
Preference:偏好设置存储:NSUserDefault存储,好处:不需要关心文件名,快速存储,底层:就是用一个字典做存储.坏处:在iOS8之前,都必须做一下同步操作,目的让内存和硬盘同步.
NSCoding(NSKeyedArchiver\NSkeyedUnarchiver):用来自定义对象归档,自定义对象需要归档:遵守NSCoding协议,并且实现对应的方法,告诉系统哪些属性需要归档,哪些属性需要解档
SQLite3:好处:1.精确的读取数据2.快速的查询到自己想要的数据3.可以批量的读取数据(可以只读出一部分数据)
利用场合:1.用来做离线缓存(只读出需要展示数据,可以节省流量)
本地存储:都是以文件形式存储.
数据库:是以文件的形式存在
数据库第一步:创建数据库文件
第二步:创建表 -> 定义一个模型类
第三步:设计字段(这个表里面有哪些属性) -> 设计模型属性(主要是看你想存储哪些属性)
注意:一定需要一个主键,每条记录的唯一标识,自动增长
第四步:添加记录(设置每个属性的值) -> 创建模型,并且给模型赋值
1.创建数据库链接,就等于创建数据库文件
sql语句
DDL语句:创建表格和删除表格
1.创建表格 create table if not exists 表名(字段名 字段类型,...);
create table t_student (id integer primary key,name text,age integer);
判断下有没有这个表格
create table if not exists t_student (id integer primary key,name text,age integer);
2.删除表格 drop table if exists 表名;
drop table if exists t_student;
DML:增,删,改:操作的是记录
增 insert into 表名 (字段,...) values(字段值);
如果是字段是字符串类型,必须要用单引号(')扩住
insert into t_student (name,age) values ('a',10);
改 update 表名 set 字段 = 字段值,....
update t_student set name = 'c',age = 18;
删:会把t_student表里面的所有记录全部删掉
delete from t_student;
删 delete from 表名;把表里面的所有记录全部删除.
3. 条件语句
update t_student set age = 9 where age =1 and name = '左泽';
4.查询语句(DQL) select 字段 from 表名;
select s.name t_name from t_student s where age = 1 and name = '小泽';
模糊查询
%:代表所有的值
%3:前面无论是什么值,只要以3结尾就OK
3%:后面无论是什么值,只要以3就Ok
%3%:无论前面后面是什么,可以有值也可以没有值,只要有3就行
113:
第一步:创建数据库文件
1、导入sqlite3框架
2、导入头文件
3、创建数据库文件
1 NSString *docPatch = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES)[0]; 2 NSString *filePatch = [docPatch stringByAppendingPathComponent:@"student.splite"]; 3 /** 4 * 打开数据库 5 * 6 * @param filename 7 * @param ppDb 8 * 9 * @return 是否打开成功,只要打开成功,就会自动创建数据库文件,文件名就是filename,还有会给数据库实例赋值 10 */ 11 // sqlite3_open(<#const char *filename#>, <#sqlite3 **ppDb#>) 12 // 把OC中字符串转换成c语言字符串 -> NSUTF8String 13 sqlite3 *db; 14 if (sqlite3_open(filePatch.UTF8String, &db)) { 15 NSLog(@"打开成功"); 16 }else{ 17 NSLog(@"打开失败"); 18 }
二、创建表格语句
1 // 创建表格 2 /** 3 * 执行数据库语句 4 * 5 * @param sqlite3 数据库实例 6 * @param sql sql语句 7 * @param callback 执行完成的回调 8 void * 回调的第一个参数 9 errmsg 错误信息 10 * 11 * @return 如果执行成功会返回 12 */ 13 // sqlite3_exec(sqlite3 *, const char *sql, int (*callback)(void *, int, char **, char **), void *, char **errmsg); 14 char *errmsg; 15 NSString *sql = @"crate table if not exists t_student (id integer primary key, name text not null);"; 16 // 创建表格 17 18 sqlite3 *db;
sqlite3_exec(db, sql.UTF8String, NULL, NULL, &errmsg); 19 if(errmsg){ 20 NSLog(@"创建表格失败"); 21 } else { 22 NSLog(@"创建表格成功"); 23 }
三、增-插入(增加)数据的语句
char *errmsg; NSString *sql = [NSString stringWithFormat:@"insert into t_student (name) values('abc');"]; // 创建表格
sqlite3 *db; sqlite3_exec(db, sql.UTF8String, NULL, NULL, &errmsg); if (errmsg) { NSLog(@"插入失败"); }else{ NSLog(@"插入成功"); }
四、删-删除表格语句
char *errmsg; NSString *sql = [NSString stringWithFormat:@"delete from t_student;"]; // 创建表格
sqlite3 *db;
sqlite3_exec(db, sql.UTF8String, NULL, NULL, &errmsg); if (errmsg) { NSLog(@"删除失败"); }else{ NSLog(@"删除成功"); }
五、改-改掉表格中某个字段的语句
char *errmsg; NSString *sql = [NSString stringWithFormat: @"update t_student set name = 'b';"]; // 创建表格 sqlite3 *db;
sqlite3_exec(db, sql.UTF8String, NULL, NULL, &errmsg); if (errmsg) { NSLog(@"更新失败"); }else{ NSLog(@"更新成功"); }
六、 查- 查找数据的语句
查询跟增删改不一样,查询之前得先有一个准备,先看下查询语句的C语言函数
1 // 查询跟增删改不一样 2 3 // 1.让数据准备一下 4 /** 5 * 6 * 7 * db:数据实例 8 * zSql:查询的准备语句 9 int nByte 查询语句的字节 -1->就会自动计算字节 10 ppStmt:句柄:操作数据库里面的记录 11 返回值 准备成功就返回 SQLITE_OK , 失败返回 SQLITE_FAIL 12 */ 13 sqlite3_prepare_v2(sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **ppStmt, const char **pzTail)
查询语句代码实例
1 sqlite3_stmt *stmt; 2 sqlite3 *db; 3 NSString *sql = [NSString stringWithFormat:@"select * from t_student;"]; 4 if (sqlite3_prepare_v2(db, sql.UTF8String, -1, &stmt, NULL) == SQLITE_OK) { 5 NSLog(@"准备成功"); 6 // 执行句柄,去寻找下一条记录 7 while (sqlite3_step(stmt) == SQLITE_ROW) { 8 NSLog(@"找到数据"); 9 // 获取哪一列的数据 10 const unsigned char *name = sqlite3_column_text(stmt, 1); 11 Student *s = [[Student alloc] init]; 12 s.name = [NSString stringWithUTF8String:(const char *)name]; 13 [arrM addObject:s]; 14 } 15 16 17 }
本文来自博客园,作者:半个童钱,转载请注明原文链接:https://www.cnblogs.com/bangetongqian/p/4164022.html