初识SQLite

//此文仅为课堂学习笔记,感谢肖老师
数据持久化
NSUserDefaults
plist
归档/解档
SQLite:把内存中的数据存到磁盘(文件)

SQLite 是一个开源的嵌入式的关系型数据库

增/删/改/查:
CRUD: Create / Retrieve / Update / Delete0
情况一:没有数据库
1,创建数据库文件(SQLite)
test
2,创建表(一个数据库可以包含非常多的表)
create table people (id integer, name text, age integer, class text);
3,增/删/改/查(数据库)
增:插入(insert)数据
insert into people (id,name,age,class) values (1,’Bob’,19,’1602’);
改:更新(update)数据
update people set age = 17 where name = ‘Bob’;
查:查询(select)数据
select *from people where age < 18 or class = ‘1602’;
删:删除(delete)数据
delete from people where name = ‘Bob’;

情况二:有包含数据的数据库文件
读取数据库文件
只说2个。可视化软件操作/XCode
Xcode:
样例(理解):使用OC语言实现下面功能(操作数据库中的数据)
【Demo01_SQLite】
-> 前提:手动导入sqlite3.0.tbd库+import头文件
-> 需求如下(OC代码 -> sqlite3.0.tbd库 -> sqlite数据库数据)
a. 创建数据库文件(SQLite)
b. 创建表(一个数据库可以包含非常多表)
c. 增/删/改/查(操作数据)
//**********************************
//需求:对数据库中的数据进行增/删/改/查

//1.创建数据库(文件: 路径+文件名字)
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
//db: database(数据库)
NSString *dbFilePath = [documentPath stringByAppendingPathComponent:@"test.sqlite"];
/*参数一:数据库文件所在路径
  参数二:给定数据库类型对象地址
  功能:既创建一个数据库文件;又把数据库文件打开(有权限对数据库进行操作)
 */
sqlite3 *db = NULL;
int ret = sqlite3_open([dbFilePath cStringUsingEncoding:NSUTF8StringEncoding], &db);
if (ret != SQLITE_OK) {
    NSLog(@"创建数据库文件失败:%s", sqlite3_errmsg(db));
}
//2.创建表(SQL语句)
//exec全称:execute
/* 参数二:要执行的SQL语句
 */
const char *createTable = "create table if not exists people (id integer, name text, age integer, class text)";
char *errmsg = NULL;
ret = sqlite3_exec(db, createTable, NULL, NULL, &errmsg);
if (ret != SQLITE_OK) {
    NSLog(@"创建表失败:%s", errmsg);
}
//3.增/删/改/查
const char *insertStr = "insert into people (id,name,age,class) values (1,'Jonny',19,'1602')";
ret = sqlite3_exec(db, insertStr, NULL, NULL, &errmsg);
if (ret != SQLITE_OK) {
    NSLog(@"无法插入数据:%s", errmsg);
}
//查询操作
/*参数一:数据库对象
  参数二:要执行的查询SQL语句
  参数三:每次最大要执行的SQL语句的字节数
  参数四:查询结果存在该参数中
  参数五:NULL(指向下次未执行的SQL语句部分)
 */
const char *selectStr = "select * from people";
sqlite3_stmt *stmt; //statement缩写
ret = sqlite3_prepare(db, selectStr, -1, &stmt, NULL);
if (ret == SQLITE_OK) {
    //获取成功;循环从stmt变量中取值
    while (sqlite3_step(stmt) == SQLITE_ROW) {
        //如果调用的step方法的返回值等于SQLITE_ROW(100), 还有下一条记录;如果不等于,循环结束(没有记录)
        //根据不同字段的类型,选择不同的方法
        //id(参数二:字段对应的列下标)
        int idValue = sqlite3_column_int(stmt, 0);
        //name
        const unsigned char *name = sqlite3_column_text(stmt, 1);
        //age
        int age = sqlite3_column_int(stmt, 2);
        //class
        const unsigned char *class = sqlite3_column_text(stmt, 3);
        printf("id:%d; name:%s; age:%d; class:%s\n\n", idValue, name, age, class);
    }
    //手动调用方法释放stmt占用的内存
    sqlite3_finalize(stmt);
}
//收尾工作(打开数据库有一个连接; 不使用需要关闭数据库连接)
sqlite3_close(db);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值