<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="objc">
SQLite常用函数:
打开数据库: sqlite3_open();
关闭数据库: sqlite3_close();
执行SQL语句: sqlite3_exec();
编译SQL语句: sqlite3_prepare_v2();
执行查询SQL语句: sqlite3_setp();
结束SQL语句: sqlite3_finalize();
绑定参数: sqlite3_bind_text();
查询字段上的数据: sqlite3_column_text();
新建一个类继承于NSObject 添加系统库libsqlite3.dylib 并导入文件
#import <sqlite3.h>
//创建表</span>
- (BOOL)createTable
{
// 1.打开数据库
// (1)动态获取doc目录 设置存储数据库目录
NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
// (2)拼接路径
NSString *SQLPath = [doc stringByAppendingPathComponent:@"myData.sqlite"];
// (3)声明一个数据库变量
sqlite3 *sqlite = nil;
// (4)打开数据库 :如果有数据库则直接打开,如果没有则创建
int open = sqlite3_open([SQLPath UTF8String], &sqlite);
// (5)如果打开数据库失败了
if (open != SQLITE_OK) {
NSLog(@"打开失败");
return NO;
}
// 2.写sql数据
NSString *sql = @"CREATE TABLE if not exists user(user_name text,user_age integer,user_id integer )";
// (1)执行语句
char *error = nil;
int exec = sqlite3_exec(sqlite, [sql UTF8String], NULL, NULL, &error);
// (2)如果执行语句失败了
if (exec != SQLITE_OK) {
NSLog(@"执行失败");
sqlite3_close(sqlite);
return NO;
}
// 3.关闭数据库
sqlite3_close(sqlite);
return YES;
}
//插入数据
- (BOOL)insertData:(UserModel *)model
{
// 1.打开数据库
// (1)动态获取doc目录 设置存储数据库目录
NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
// (2)拼接路径
NSString *SQLPath = [doc stringByAppendingPathComponent:@"myData.sqlite"];
// (3)声明一个数据库变量
sqlite3 *sqlite = nil;
// (4)打开数据库 :如果有数据库则直接打开,如果没有则创建
int result = sqlite3_open([SQLPath UTF8String], &sqlite);
// (5)如果打开数据库失败了
if (result != SQLITE_OK) {
NSLog(@"打开失败");
return NO;
}
// 2.编写SQL数据 ?是占位符
NSString *sql = @"insert into user(user_name,user_age,user_ID) values(?,?,?)";
// 3.编译SQL语句
// (1)声明数据库句柄
sqlite3_stmt *stmt = nil;
// (2)编译SQL语句
result = sqlite3_prepare_v2(sqlite, [sql UTF8String], -1, &stmt, NULL);
// (3)如果编译失败了
if (result != SQLITE_OK) {
NSLog(@"编译失败");
// 关闭数据库
sqlite3_close(sqlite);
}
// (4)绑定数据 int:?的位置 从1开始
// 需要绑定的数据
NSString *name = model.name;
NSInteger age = model.age;
NSInteger ID = model.ID;
sqlite3_bind_text(stmt, 1, [name UTF8String], -1, nil);
sqlite3_bind_int64(stmt, 2, age);
sqlite3_bind_int64(stmt, 3, ID);
// 4.执行SQL语句
result = sqlite3_step(stmt);
if (result != SQLITE_DONE) {
NSLog(@"执行语句失败");
//关闭数据库
sqlite3_close(sqlite);
//关闭句柄
sqlite3_finalize(stmt);
}
// 5.关闭数据库和句柄
//关闭数据库
sqlite3_close(sqlite);
//关闭句柄
sqlite3_finalize(stmt);
return YES;
}
//更新数据
- (BOOL)updateData
{
// 1.打开数据库
// (1)动态获取doc目录 设置存储数据库目录
NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
// (2)拼接路径
NSString *SQLPath = [doc stringByAppendingPathComponent:@"myData.sqlite"];
// (3)声明一个数据库变量
sqlite3 *sqlite = nil;
// (4)打开数据库 :如果有数据库则直接打开,如果没有则创建
int result = sqlite3_open([SQLPath UTF8String], &sqlite);
// (5)如果打开数据库失败了
if (result != SQLITE_OK) {
NSLog(@"打开失败");
return NO;
}
// 2.编写SQL数据 ?是占位符
NSString *sql = @"update user set user_name=? where user_age=? ";
// 3.编译SQL语句
// (1)声明数据库句柄
sqlite3_stmt *stmt = nil;
// (2)编译SQL语句
result = sqlite3_prepare_v2(sqlite, [sql UTF8String], -1, &stmt, NULL);
// (3)如果编译失败了
if (result != SQLITE_OK) {
NSLog(@"编译失败");
// 关闭数据库
sqlite3_close(sqlite);
}
// (4)绑定数据 int:?的位置 从1开始
// 需要绑定的数据
NSString *name = @"孔子";
NSInteger age = 100;
sqlite3_bind_text(stmt, 1, [name UTF8String], -1, nil);
sqlite3_bind_int64(stmt, 2, age);
// 4.执行SQL语句
result = sqlite3_step(stmt);
if (result != SQLITE_DONE) {
NSLog(@"执行语句失败");
//关闭数据库
sqlite3_close(sqlite);
//关闭句柄
sqlite3_finalize(stmt);
}
// 5.关闭数据库和句柄
//关闭数据库
sqlite3_close(sqlite);
//关闭句柄
sqlite3_finalize(stmt);
return YES;
}
//查询语句
- (void)selectData
{
// 1.打开数据库
// (1)动态获取doc目录 设置存储数据库目录
NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
// (2)拼接路径
NSString *SQLPath = [doc stringByAppendingPathComponent:@"myData.sqlite"];
// (3)声明一个数据库变量
sqlite3 *sqlite = nil;
// (4)打开数据库 :如果有数据库则直接打开,如果没有则创建
int result = sqlite3_open([SQLPath UTF8String], &sqlite);
// (5)如果打开数据库失败了
if (result != SQLITE_OK) {
NSLog(@"打开失败");
}
// 2.编写SQL数据 ?是占位符
NSString *sql = @"select * from user where user_name=?";
// 3.编译SQL语句
// (1)声明数据库句柄
sqlite3_stmt *stmt = nil;
// (2)编译SQL语句
result = sqlite3_prepare_v2(sqlite, [sql UTF8String], -1, &stmt, NULL);
// (3)如果编译失败了
if (result != SQLITE_OK) {
NSLog(@"编译失败");
// 关闭数据库
sqlite3_close(sqlite);
}
// (4)绑定数据 int:?的位置 从1开始
// 需要绑定的数据
NSString *name = @"孔子";
sqlite3_bind_text(stmt, 1, [name UTF8String], -1, nil);
// 4.执行SQL语句
result = sqlite3_step(stmt);
//循环遍历后的数据列表
while (result == SQLITE_ROW) {
//取出字段为0 的数据
char *name = (char *)sqlite3_column_text(stmt, 0);
NSInteger age = sqlite3_column_int64(stmt, 1);
NSInteger ID = sqlite3_column_int64(stmt, 2);
//char转字符串
NSString *nameStr = [NSString stringWithUTF8String:name];
NSLog(@"%@, %ld, %ld", nameStr, age, ID);
result = sqlite3_step(stmt);
}
sqlite3_close(sqlite);
sqlite3_finalize(stmt);
}