iOS sqlite3(数据库)

简介: 1. 导入框架包点击项目-> General-> Linked Frameworks and Libraries->输入sqlite3,点击Add。图1.

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 <Foundation/Foundation.h>
#import <sqlite3.h>

@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
目录
相关文章
|
28天前
|
API 数据库 C语言
【C/C++ 数据库 sqlite3】SQLite C语言API返回值深入解析
【C/C++ 数据库 sqlite3】SQLite C语言API返回值深入解析
167 0
|
2月前
|
存储 监控 安全
内网屏幕监控软件的数据存储与管理:使用SQLite数据库保存监控记录和配置信息
在当今数字化时代,安全和监控在企业和组织中变得至关重要。内网屏幕监控软件作为一种关键工具,帮助组织监视员工的活动并确保信息安全。这种软件不仅需要高效地记录和管理监控数据,还需要能够方便地进行配置和调整。本文将讨论如何使用SQLite数据库来保存监控记录和配置信息,并介绍如何通过自动化机制将监控到的数据提交到指定网站。
154 2
|
9天前
|
SQL 关系型数据库 数据库
Python中SQLite数据库操作详解:利用sqlite3模块
【4月更文挑战第13天】在Python编程中,SQLite数据库是一个轻量级的关系型数据库管理系统,它包含在一个单一的文件内,不需要一个单独的服务器进程或操作系统级别的配置。由于其简单易用和高效性,SQLite经常作为应用程序的本地数据库解决方案。Python的内置sqlite3模块提供了与SQLite数据库交互的接口,使得在Python中操作SQLite数据库变得非常容易。
|
14天前
|
关系型数据库 MySQL 数据库连接
Python+SQLite数据库实现服务端高并发写入
Python中使用SQLite内存模式实现高并发写入:创建内存数据库连接,建立表格,通过多线程并发写入数据。虽然能避免数据竞争,但由于SQLite内存模式采用锁机制,可能在高并发时引发性能瓶颈。若需更高性能,可选择MySQL或PostgreSQL。
18 0
|
1月前
|
关系型数据库 数据库 C++
嵌入式数据库sqlite3【基础篇】基本命令操作,小白一看就懂(C/C++)
嵌入式数据库sqlite3【基础篇】基本命令操作,小白一看就懂(C/C++)
|
1月前
|
存储 SQL 数据库
django如何连接sqlite数据库?
django如何连接sqlite数据库?
41 0
|
2月前
|
SQL 数据库管理
sqlite语句order by两个字段同时排序处理
sqlite语句order by两个字段同时排序处理
21 0
|
2月前
|
SQL 关系型数据库 MySQL
Python中的数据库操作:SQLite与MySQL的连接
Python中的数据库操作:SQLite与MySQL的连接
120 0
|
2月前
|
SQL 存储 数据库
艺术型轻量级数据库 --Sqlite
艺术型轻量级数据库 --Sqlite
|
3月前
|
SQL Dart 数据库
Flutter笔记: 在Flutter应用中使用SQLite数据库
Flutter笔记: 在Flutter应用中使用SQLite数据库
184 0