android ios sqlite,iOS开发之SQLite

1.SQLite简介

SQLite 是一种轻量级的关系型数据库,其最初的设计目标是用于嵌入式系统。它占用资源少,处理速度快。能够支持Windows/Linux/Unix/Mac OS X/iOS等等主流的操作系统。现在最新的版本是SQLite3

2.在iOS开发中使用SQLite

2.1 导入动态库libsqlite3.tbd

9cd2ff98cdd2?mType=Group

9cd2ff98cdd2?mType=Group

2.1.2导入头文件

#import

导入动态库要用尖括号

2.2 创建数据库

2.2.1 拼接数据保存沙盒路径

将数据库文件保存在Document文件夹中,数据库文件名按你的需求写

NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"data.sqlite"];

2.2.2 创建数据库文件

使用sqlite3_open()函数,该函数会打开指定路径数据库文件,如果该文件不存在 就会在该路径下创建数据库文件

//创建sqlite3数据库句柄

sqlite3 *ppDb = NULL;

//参数1:待打开(创建)的数据库文件名 由于是sqlite3_open是c语言函数 需要将NSString类型的path转化为char *类型

//参数2:sqlite3数据库句柄的指针

//返回值: int类型 为0(SQLITE_OK)时表示创建成功

int success = sqlite3_open(path.UTF8String, &ppDb);

//判断创建是否成功

if (success == SQLITE_OK) {

NSLog(@"数据库创建成功");

//输出数据库文件保存路径

NSLog(@"数据库保存位置:%@",path);

}else{

NSLog(@"数据库创建失败");

}

2.3 创建表

2.3.1 创建SQL语句

对SQL语句不太了解的读者可以自行百度

下面SQL语句意思是 如果t_student 表不存在,就创建一个名为t_student的表。这个表有三列。第一列列名为ID ,INTEGER(整形)类型,是主键,自动增长。第二列列名为name,TEXT(字符串)类型,不允许为空。第三列列名为score,REAL(浮点)类型,默认值是60.0

NSString *sql = @"CREATE TABLE IF NOT EXISTS t_student(ID INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, score REAL DEFAULT 60.0);";

2.3.2 执行上面的SQL语句

//创建并初始化错误信息指针

char *errmsg = NULL;

//调用sqlite3_exec()函数执行SQL语句

//参数一:要打开的数据库句柄

//参数二:要执行的SQL语句 由于是sqlite3_open是c语言函数 需要将NSString类型的sql转化为char *类型

//参数三:回调函数

//参数四:回调函数的第一个参数

//参数五:错误信息,是指向错误消息字符串的指针

//返回值: int类型 为0(SQLITE_OK)时表示SQL语句执行成功

int success_t = sqlite3_exec(ppDb, sql.UTF8String, NULL, NULL, &errmsg);

//判断表是否创建成功

if (success_t == SQLITE_OK) {

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

}else{

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

//输出错误信息

NSLog(@"错误信息:%s",errmsg);

}

2.4 在表中插入数据

2.4.1 创建SQL语句

下面SQL语句的意思是 向t_student表中插入一条数据,其中name字段的值为Allen,score字段的值为80.0

NSString *sql = @"INSERT INTO t_student(name,score) VALUES('Allen',80.0);";

2.4.2 执行SQL语句

char *errmsg = NULL;

int success_i = sqlite3_exec(ppDb, sql.UTF8String, NULL, NULL, &errmsg);

if (success_i == SQLITE_OK) {

NSLog(@"数据插入成功");

}else{

NSLog(@"数据插入失败");

NSLog(@"错误信息:%s",errmsg);

}

2.5 删除数据

2.5.1 创建SQL语句

这句SQL语句意思是 删除 t_student表中分数小于60的数据

NSString *sql = @"DELETE FROM t_student WHERE score < 60;";

2.5.2 执行SQL语句

char *errmsg = NULL;

int success_d = sqlite3_exec(ppDb, sql.UTF8String, NULL, NULL, &errmsg);

if (success_d == SQLITE_OK) {

NSLog(@"删除数据成功");

}else{

NSLog(@"删除数据失败");

NSLog(@"错误信息:%s",errmsg);

}

2.6 修改数据

2.6.1 创建SQL语句

下面SQL语句的意思是 将t_student表中score = 80 的数据全部改成score = 90

NSString *sql = @"UPDATE t_student SET score = 90 WHERE score = 80;";

2.6.2 执行SQL语句

char *errmsg = NULL;

int success_d = sqlite3_exec(ppDb, sql.UTF8String, NULL, NULL, &errmsg);

if (success_d == SQLITE_OK) {

NSLog(@"修改数据成功");

}else{

NSLog(@"修改数据失败");

NSLog(@"错误信息:%s",errmsg);

}

2.7 查询数据

2.7.1 创建SQL语句

下面SQL语句的意思是 查询t_student表中 score > 80的所有数据

NSString *sql = @"SELECT * FROM t_student WHERE score > 80";

2.7.2 执行SQL语句

//初始化Statement句柄

sqlite3_stmt *ppStmt = NULL;

/*

使用 sqlite3_prepare_v2()函数执行SQL查询语句

参数一:要查询的数据库句柄

参数二:要执行的SQL语句,由于是sqlite3_open是c语言函数 需要将NSString类型的sql转化为char *类型

参数三:这个函数能从SQL语句中读取的字节数的最大值,如果不限制SQL语句长度,填-1即可

参数四:Statement句柄,保存最终结果

参数五:保留字段

返回值: int类型 为0(SQLITE_OK)时表示SQL语句执行成功

*/

int success_s = sqlite3_prepare_v2(ppDb, sql.UTF8String, -1, &ppStmt, NULL);

2.7.3 获取Statement句柄中保存的查询结果

if (success_s == SQLITE_OK) {

NSLog(@"数据查询成功");

//遍历Statement句柄中的数据

while (sqlite3_step(ppStmt) == SQLITE_ROW) {

//获取当前行第0列的数据

int ID = sqlite3_column_int(ppStmt, 0);

//获取当前行第1列的数据

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

//获取当前行第2列的数据

double score = sqlite3_column_double(ppStmt, 2);

//输出获取到的结果

NSLog(@"ID = %d name = %s score = %lf",ID,name,score);

}

}else{

NSLog(@"数据查询失败");

}

如果你有不同的见解 或文章有错误之处 希望能够指出 谢谢

9cd2ff98cdd2?mType=Group

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值