博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS sqlite3(数据库)
阅读量:5802 次
发布时间:2019-06-18

本文共 6920 字,大约阅读时间需要 23 分钟。

1. 导入框架包

点击项目-> General-> Linked Frameworks and Libraries->输入sqlite3,点击Add。

img_5de2872ea968bb040815680be80ac505.png
图1.png

2. 创建数据库

// 获取生成路径- (NSString *)path {    NSArray *documentArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);    NSString *documentPath = [documentArr firstObject];    // 其中person是数据库名称,".db"是数据库的后缀    NSString *path = [NSString stringWithFormat:@"%@/person.db", documentPath];    NSLog(@"数据库路径: %@", path);    return path;}// 创建数据库- (void)createDb {    sqlite3 *database;    int result = sqlite3_open([[self path] UTF8String], &database);    if (result != SQLITE_OK) {        NSLog(@"打开数据库失败");    }    NSLog(@"打开数据库成功");}

3. 创建表

// 创建表- (void)createTable {    char *error;    const char *sql = "create table if not exists person(id integer primary key autoincrement, name char, sex char)";    /*        第一个参数:一个打开的数据库        第二个参数:要执行的sql语句        第三个参数:回调方法        第四个参数:第一个参数的回调        第五个参数:错误信息     */    int result = sqlite3_exec(database, sql, NULL, NULL, &error);    if (result != SQLITE_OK) {        NSLog(@"创建表失败: %s", error);    } else {        NSLog(@"创建表成功");    }}

4. 插入数据

// 插入数据- (void)insertData {    const char *sql = "insert into person(name,sex) values('mazaiting','male');";    /*        第一个参数:一个打开的数据库        第二个参数:要执行的sql语句        第三个参数:执行sql语句的字节数        第四个参数:状态句柄        第五个参数:未使用,传入NULL     */    int result = sqlite3_prepare_v2(database, sql, -1, &stmt, NULL);    if (result != SQLITE_OK) {        NSLog(@"添加失败, %d", result);    } else {        // 执行sql语句        sqlite3_step(stmt);        NSLog(@"插入成功");    }}

5. 查询数据

// 查询数据- (void)queryData {    const char *sql = "select * from person";    int result = sqlite3_prepare_v2(database, sql, -1, &stmt, NULL);    if (result != SQLITE_OK) {        NSLog(@"查询失败:%d", result);    } else {        // 查询结果可能不止一条, 知道sqlite3_step(stmt) != SQLITE_ROW,查询结束        while (sqlite3_step(stmt) == SQLITE_ROW) {            // 查询第0行            int id = sqlite3_column_int(stmt, 0);            // 查询第1行            char *name = (char *)sqlite3_column_text(stmt, 1);            // 查询第2行            char *sex = (char *)sqlite3_column_text(stmt, 2);            NSLog(@"查询成功:%d---%s---%s", id, name, sex);        }    }}

6. 修改数据

// 修改数据- (void)updateData {    const char *sql = "update person set name='zaiting' where name='mazaiting'";    int result = sqlite3_prepare_v2(database, sql, -1, &stmt, NULL);    if (result != SQLITE_OK) {        NSLog(@"修改失败:%d", result);    } else {        sqlite3_step(stmt);        NSLog(@"修改成功");    }}

7. 删除数据

// 删除数据- (void)deleteData {    const char *sql = "delete from person where sex='male'";    int result = sqlite3_prepare_v2(database, sql, -1, &stmt, NULL);    if (result != SQLITE_OK) {        NSLog(@"删除失败:%d", result);    } else {        sqlite3_step(stmt);        NSLog(@"删除成功");    }}

8. 关闭数据库

// 关闭数据库- (void)closeDb {    // 销毁stmt,回收资源    sqlite3_finalize(stmt);    // 关闭数据库    sqlite3_close(database);}

9. 完整代码

SqliteManager.h

#import 
#import
@interface SqliteManager : NSObject// 创建数据库- (void)createDb;// 创建表- (void)createTable;// 插入数据- (void)insertData;// 查询数据- (void)queryData;// 修改数据- (void)updateData;// 删除数据- (void)deleteData;// 关闭数据库- (void)closeDb;@end

SqliteManager.m

////  SqliteManager.m//  06sqlite////  Created by mazaiting on 18/1/25.//  Copyright © 2018年 mazaiting. All rights reserved.//#import "SqliteManager.h"// 数据库sqlite3 *database;// 预编译SQL语句产生的结果sqlite3_stmt *stmt;@implementation SqliteManager// 获取生成路径- (NSString *)path {    NSArray *documentArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);    NSString *documentPath = [documentArr firstObject];    // 其中person是数据库名称,".db"是数据库的后缀    NSString *path = [NSString stringWithFormat:@"%@/person.db", documentPath];    NSLog(@"数据库路径: %@", path);    return path;}// 创建数据库- (void)createDb {    /*          第一个参数:数据库文件名,(UTF-8)        第二个参数:数据库句柄     */    int result = sqlite3_open([[self path] UTF8String], &database);    if (result != SQLITE_OK) {        NSLog(@"打开数据库失败");    }    NSLog(@"打开数据库成功");}// 创建表- (void)createTable {    char *error;    const char *sql = "create table if not exists person(id integer primary key autoincrement, name char, sex char)";    /*        第一个参数:一个打开的数据库        第二个参数:要执行的sql语句        第三个参数:回调方法        第四个参数:第一个参数的回调        第五个参数:错误信息     */    int result = sqlite3_exec(database, sql, NULL, NULL, &error);    if (result != SQLITE_OK) {        NSLog(@"创建表失败: %s", error);    } else {        NSLog(@"创建表成功");    }}// 插入数据- (void)insertData {    const char *sql = "insert into person(name,sex) values('mazaiting','male');";    /*        第一个参数:一个打开的数据库        第二个参数:要执行的sql语句        第三个参数:执行sql语句的字节数        第四个参数:状态句柄        第五个参数:未使用,传入NULL     */    int result = sqlite3_prepare_v2(database, sql, -1, &stmt, NULL);    if (result != SQLITE_OK) {        NSLog(@"添加失败, %d", result);    } else {        // 执行sql语句        sqlite3_step(stmt);        NSLog(@"插入成功");    }}// 查询数据- (void)queryData {    const char *sql = "select * from person";    int result = sqlite3_prepare_v2(database, sql, -1, &stmt, NULL);    if (result != SQLITE_OK) {        NSLog(@"查询失败:%d", result);    } else {        // 查询结果可能不止一条, 知道sqlite3_step(stmt) != SQLITE_ROW,查询结束        while (sqlite3_step(stmt) == SQLITE_ROW) {            // 查询第0行            int id = sqlite3_column_int(stmt, 0);            // 查询第1行            char *name = (char *)sqlite3_column_text(stmt, 1);            // 查询第2行            char *sex = (char *)sqlite3_column_text(stmt, 2);            NSLog(@"查询成功:%d---%s---%s", id, name, sex);        }    }}// 修改数据- (void)updateData {    const char *sql = "update person set name='zaiting' where name='mazaiting'";    int result = sqlite3_prepare_v2(database, sql, -1, &stmt, NULL);    if (result != SQLITE_OK) {        NSLog(@"修改失败:%d", result);    } else {        sqlite3_step(stmt);        NSLog(@"修改成功");    }}// 删除数据- (void)deleteData {    const char *sql = "delete from person where sex='male'";    int result = sqlite3_prepare_v2(database, sql, -1, &stmt, NULL);    if (result != SQLITE_OK) {        NSLog(@"删除失败:%d", result);    } else {        sqlite3_step(stmt);        NSLog(@"删除成功");    }}// 关闭数据库- (void)closeDb {    // 销毁stmt,回收资源    sqlite3_finalize(stmt);    // 关闭数据库    sqlite3_close(database);}@end

10. 使用

#import "ViewController.h"#import "SqliteManager.h"@interface ViewController ()@property (nonatomic, strong) SqliteManager *manager;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    _manager = [SqliteManager new];}- (IBAction)createDb {    [_manager createDb];}- (IBAction)createTable {    [_manager createTable];}- (IBAction)insertData {    [_manager insertData];}- (IBAction)queryData {    [_manager queryData];}- (IBAction)updateData {    [_manager updateData];}- (IBAction)deleteData {    [_manager deleteData];}- (IBAction)closeDb {    [_manager closeDb];}@end
img_e94b06c2e503316580fd0aa20967e620.png
图2.png

转载地址:http://wfrfx.baihongyu.com/

你可能感兴趣的文章
Oracle命令导入dmp文件
查看>>
OCP读书笔记(24) - 题库(ExamD)
查看>>
Http、TCP/IP协议与Socket之间的区别(转载)
查看>>
解决Unable to load R3 module ...VBoxDD.dll (VBoxDD):GetLastError=1790
查看>>
.net excel利用NPOI导入oracle
查看>>
vrpie在Visio Studio 中无法调试的问题
查看>>
第六课:数据库的基本工具
查看>>
关于二叉树重构的思索
查看>>
$_SERVER['SCRIPT_FLENAME']与__FILE__
查看>>
skynet实践(8)-接入websocket
查看>>
系统版本判断
查看>>
关于Css选择器优先级
查看>>
My97DatePicker 日历插件
查看>>
0603 学术诚信与职业道德
查看>>
小点心家族第3位成员——楼层定位效果
查看>>
Knockout.Js官网学习(enable绑定、disable绑定)
查看>>
hive基本操作与应用
查看>>
excel快捷键设置
查看>>
poj3692
查看>>
python之信号量【Semaphore】
查看>>