#import
static sqlite3 *db = nil;
打开数据库
// 数据库文件路径
NSString *pathString = [NSString stringWithFormat:"%@/Documents/Table.db", NSHomeDirectory()];
const char *path = [pathString UTF8String];
// 如果数据库文件不存在,这个函数会自动创建数据库文件,这个函数只能接收 const char * 类型的路径参数
int result = sqlite3_open(path, &_db);
if (result == SQLITE_OK) {
// 数据库打开成功
} else {
// 数据库打开失败,失败之后要掉用关闭数据库方法
int ret = sqlite3_close(_db);
if (ret == SQLITE_OK) {
// 关闭成功
_db = nil;
} else {
// 关闭失败
}
}
创建表格
// 格式,sqlite 中的类型包括:integer 整型值 real 浮点值 text 文本字符串 blob 二进制数据(比如文件)
// 1. create table 表名 (字段名1 字段类型1, 字段名2 字段类型2, ...);
// 2. create table if not exists 表名 (字段名1 字段类型1, 字段名2 字段类型2, ...);
NSString *sql = @"CREATE TABLE IF NOT EXISTS user (name TEXT, age INTEGER)";
int result = sqlite3_exec(_db, [sql UTF8String], NULL, NULL, NULL);
if (result == SQLITE_OK) {
// 表创建成功
} else {
// 表创建失败
}
删除表格
// 格式
// 1. drop table 表名;
// 2. drop table if exists 表名;
NSString *sql = @"DROP TABLE IF EXISTS user";
int result = sqlite3_exec(_db, [sql UTF8String], NULL, NULL, NULL);
if (result == SQLITE_OK) {
// 表删除成功
} else {
// 表删除失败
}
插入数据
// 格式
// insert into 表名 (字段1, 字段2, ...) values (字段1的值, 字段2的值, ...);
NSString *sql = @"INSERT INTO user (name, age) values ('LK', 18)";
int result = sqlite3_exec(_db, [sql UTF8String], NULL, NULL, NULL);
if (result == SQLITE_OK) {
// 插入成功
} else {
// 插入失败
}
删除数据
// 格式
// delete from 表名; (这个是删除表中所有数据)
// delete from 表名 where 条件; (这个是选择性删除,比如:字段 = 某个值/字段 is 某个值/字段 != 某个值/字段 is not 某个值/字段 > 某个值/字段 < 某个值,也可以一条数据的多个字段作为条件,可以使用 and 和 or ,相当于 && 和 ||)
NSString *sql = @"DELETE FROM user WHERE age > 18";
int result = sqlite3_exec(_db, [sql UTF8String], NULL, NULL, NULL);
if (result == SQLITE_OK) {
// 删除成功
} else {
// 删除失败
}
修改数据
// 格式
// update 表名 set 字段1 = 字段1的新值, 字段2 = 字段2的新值, ...;(这个是修改表中所有数据)
// update 表名 set 字段1 = 字段1的新值, 字段2 = 字段2的新值, ... where 条件;(选择性修改)
NSString *sql = @"UPDATE user SET name = 'wang' WHERE age = 18";
int result = sqlite3_exec(_db, [sql UTF8String], NULL, NULL, NULL);
if (result == SQLITE_OK) {
// 修改成功
} else {
// 修改失败
}
查询数据
// 查询数据不能使用 sqlite3_exec 方法去执行 sq 语句
// 格式
// 1. select * from 表名; (查询表中所有数据)
// 2. select 字段1, 字段2, ... from 表名; (查询表中字段1和2的数据)
// 3. select 字段1, 字段2, ... from 表名 where 条件;(选择性查询)
NSStrng *sql = @"SELECT name FROM user WHERE age = 18";
// 参数1:数据库 参数2:sql 语句 参数3:sql 语句长度(-1自动计算)参数4:结果集(用来收集查询结果)参数5:NULL
sqlite3_stmt *stmt;
int result = sqlite3_prepare_v2(_db, [sql UTF8String], -1, &stmt, NULL);
if (result == SQLITE_OK) {
// 查询成功
// 遍历结果集拿到查询到的数据
// sqlite3_step 获取结果集中的数据
while (sqlite3_step(stmt) == SQLITE_ROW) {
// 参数1:结果集 参数2:列数
const char *name = sqlite3_column_text(stmt, 0);
integer age = sqlite3_column_integer(stmt, 1);
}
} else {
// 查询失败
}