// 数据库中组织(存储)数据是按照一定的数据格式(树/B树)来存储的! 树形结构的数据可以很方便/快捷的查询到数据!
// iOS(移动端)数据库和服务器端数据库有没有关系!
// 如果 app 本地需要缓存大量的数据,那么就在本地(磁盘/沙盒)中使用数据库来缓存数据!
// 移动端数据库 比较轻量级!
// SQLite :是使用在移动端(iOS/安卓/WP/黑莓)的数据库
// 应用场景: 购物车(离线查看!)
数据库工作过程
{
1. 数据如何存入数据库!
{
1.创建一张表.(根据存储的数据特点,创建对应的表!)
2.将数据存储在"表"中
}
2. 数据库使用
{
1. database(DB) File: 数据库文件路径! 数据库中的所有数据都保存在这个文件中!
数据库(SQL)语句是不区分大小写的! 如果是系统的关键字大写!自己的就用小写!
2. "表名"规范: 以 t_/T_ 开头,后面跟表名!
3. 插入数据!
}
DDL 语句 : "建表" 和 "删表"
{
"建表" :CREATE TABLE IF NOT EXISTS t_class (id integer, numbers text);
// 如果表不存在,才会创建!表存在,不报错!
"删表" :"DROP TABLE IF EXISTS t_class;"
// 如果表存在,才会删除!表不存在,不会报错!
注意:
"主键" :主键用来标记数据库表中唯一的一条数据! 一般在定义主键的时候,主键值由系统自动生成!
主键的类型 integter 类型,自动增长!
"建表"的最终语句:
"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT , name text , score integer ,age integer);"
PRIMARY KEY :指定主键.默认主键约束不能为空.
AUTOINCREMENT :自动增长.
}
数据库操作: CRUD 操作! "增删改查"! ---- 操作的都是"表"
DML 语句 : "增" "删" "改"
{
"增": 往表中插入数据:
"INSERT INTO t_student (name,score,age) VALUES ('jsak',80,21);"
// 打印: 会影响一行数据!
"删": 从表中删除数据:
DELETE FROM t_student;
// 默认会删除表中的所有数据, 不会删除表;
// 条件删除:
"DELETE FROM t_student WHERE score > 90;"
DELETE FROM t_student WHERE name = 'jsak';
"改" : 更新数据!
"UPDATE t_student SET age = 18 WHERE age < 18;"
// 将年龄小于 18 岁的 age 统统改为 18;
}
DQL 语句 : "查询" 语句 :查询到的结果会以表的形式返回/会查询到一个结果集.
{
SELECT * FROM t_student;
// 从表t_student 中取出所有数据!
SELECT name,score FROM t_student;
// 从表t_student 中取出字段为 name 和 score 的所有数据!
SELECT name,score FROM t_student LIMIT 5 ,5;
// LIMIT 5 ,5 :取出数据的限制条件,隔过前5条数据,取后面的5条!
// LIMIT :限制单次取出数据的数据量!
SELECT name,score FROM t_student WHERE score > 81 LIMIT 2;
// 附带条件语句的查询语句!
"SELECT name,score FROM t_student WHERE score > 81 ORDER BY score DESC LIMIT 10;"
// 将分数 > 81 的数据取出来,并且降序排序! 单次查询做多取出 10 条数据!
}
}
NSString *filePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject;
// 拼接数据库路径
filePath = [filePath stringByAppendingString:@"/student.sqlite"];
// 打开数据库!
// 1. 创建数据库实例.
FMDatabase *db = [FMDatabase databaseWithPath:filePath];
// 2. 打开数据库
BOOL is_yes = [db open];
if (is_yes) {
NSLog(@"数据库打开成功!");
// 查询数据!
// 1.查询数据的 sql 语句.
NSString *sql = @"SELECT * FROM t_student WHERE score > 60 ORDER BY score DESC LIMIT 10;";
// 2.查询数据
FMResultSet *result = [db executeQuery:sql];
// 遍历结果!
while ([result next]) { //能够查询到一条数据!
// 利用 FMDB 来查询数据的时候,可以通过"字段名"或者字段所在的"列数" 来获取内容!
// 展示数据.
int myID = [result intForColumn:@"id"];
NSString *myName = [result stringForColumn:@"name"];
int myScore = [result intForColumn:@"score"];
int myAge = [result intForColumnIndex:3];
NSLog(@"myID:%zd myName:%@ myScore:%zd myAge:%zd \n",myID,myName,myScore,myAge);
}
}
// 1.建表的 sql 语句!
NSString *sql = @"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT , name text , score integer ,age integer);";
//查询语句
NSString *sql = @"SELECT * FROM t_student WHERE score > 60 ORDER BY score DESC LIMIT 10;";
// 1. sql 语句
// 删除语句
NSString *sql = @"DELETE FROM t_student;";
// 插入语句
NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_student (name,score,age) VALUES ('%@',%zd,%zd);",name,score,age];