1.SQLite简介
SQLite 是一种轻量级的关系型数据库,其最初的设计目标是用于嵌入式系统。它占用资源少,处理速度快。能够支持Windows/Linux/Unix/Mac OS X/iOS等等主流的操作系统。现在最新的版本是SQLite3
2.在iOS开发中使用SQLite
2.1 导入动态库libsqlite3.tbd
2.1.2导入头文件
#import <sqlite3.h>
导入动态库要用尖括号
2.2 创建数据库
2.2.1 拼接数据保存沙盒路径
将数据库文件保存在Document文件夹中,数据库文件名按你的需求写
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"data.sqlite"];
对沙盒不太熟悉的读者可以参考我上一篇博客iOS开发之沙盒机制
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(@"数据查询失败");
}
如果你有不同的见解 或文章有错误之处 希望能够指出 谢谢