IOS开发之——数据库-SQLite3(03)

一 概述

  • SQLite官网及介绍
  • SQLite常见方法说明
  • SQLite示例

二 SQLite官网及介绍

2.1 官网地址

  • 官网地址主页:https://www.sqlite.org/index.html
  • C/C++ SQLite使用介绍:https://www.sqlite.org/cintro.html

2.2 SQLite使用说明

  • 数据库,纯C语言,轻量级
  • 适用于移动设备(安卓和IOS)及终端平台中
  • 开源免费,任何人都可以使用

三 SQLite常见方法说明

打开C/C++介绍文档,可以看到SQLite常用方法

IOS开发之——数据库-SQLite3(03)

; 3.1 sqlite3(数据库连接对象)

sqlite3 *db = NULL;

3.2 sqlite_stmt(用来取出查询结果)

sqlite3_stmt *stmt=NULL;
int status=sqlite3_prepare(db, sql, -1, &stmt, NULL);

3.3 sqlite3_open(打开数据库连接)

int status=sqlite3_open(filename.UTF8String, &db);

3.4 sqlite3_close(关闭数据库)

sqlite3_close(db);

3.5 sqlite3_prepare(查询或更新数据库)

 sqlite3_stmt *stmt=NULL;
 int status=sqlite3_prepare(db, sql, -1, &stmt, NULL);

3.6 sqlite3_bind(将应用程序数据存储到SQL参数中)

sqlite3_stmt *stmt;
sqlite3_bind_text(stmt, 1, "白菜", -1, NULL);
sqlite3_bind_int(stmt, 2, 27);

3.7 sqlite3_stemp(执行到下一个结果行或完成)

if(sqlite3_step(stmt) != SQLITE_DONE) {
    NSLog(@"插入数据错误");
}

3.8 sqlite3_column(当前结果行中的列值)

int _id = sqlite3_column_int(stmt, 0);

3.9 sqlite3_finalize(销毁sqlite3_stmt *对象,执行析构函数)

sqlite3_finalize(stmt);

3.10 sqlite3_exec(包函数,可以是任意SQL语句,比如CRUD操作)

int result = sqlite3_exec(db, sql, NULL, NULL, &errorMsg);

四 SQLite示例

如下所示,项目结构

IOS开发之——数据库-SQLite3(03)

; 4.1 Shop(数据库实体类)

IOS开发之——数据库-SQLite3(03)

4.2 SQLite3Tools(将ViewControl中的操作封装到了此类中)

SQLite3Tools.h
#import <foundation foundation.h>

@class Shop;

@interface SQLite3Tools : NSObject

//&#x521B;&#x5EFA;&#x8868;&#x683C;
+(void)createTable;
//&#x63D2;&#x5165;&#x6570;&#x636E;
+(void)insertTable:(Shop *)shop;
//&#x67E5;&#x8BE2;&#x6570;&#x636E;
+(NSMutableArray *)selectTableAll;
//&#x66F4;&#x65B0;&#x6570;&#x636E;
+(void)updateTable;
//&#x5220;&#x9664;&#x8868;&#x683C;&#x6570;&#x636E;
+(void)deleteTable;

@end
</foundation>
SQLite3Tools.m
#import "SQLite3Tools.h"
#import <sqlite3.h>
#import "Shop.h"

@implementation SQLite3Tools
static sqlite3 *db;
+(void)initialize
{
    //&#x6253;&#x5F00;&#x6570;&#x636E;&#x5E93;(&#x8FDE;&#x63A5;&#x6570;&#x636E;&#x5E93;)
    NSString *filename=[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]stringByAppendingPathComponent:@"shops.sqlite"];
    //&#x5982;&#x679C;&#x6570;&#x636E;&#x5E93;&#x6587;&#x4EF6;&#x4E0D;&#x5B58;&#x5728;&#xFF0C;&#x7CFB;&#x7EDF;&#x4F1A;&#x81EA;&#x52A8;&#x521B;&#x5EFA;&#x6587;&#x4EF6;&#x81EA;&#x52A8;&#x521D;&#x59CB;&#x5316;&#x6570;&#x636E;&#x5E93;

    int status=sqlite3_open(filename.UTF8String, &db);
    if (status==SQLITE_OK) {//&#x6253;&#x5F00;&#x6210;&#x529F;
        NSLog(@"&#x6253;&#x5F00;&#x6570;&#x636E;&#x5E93;&#x6210;&#x529F;");
    }else{
        NSLog(@"&#x6253;&#x5F00;&#x6570;&#x636E;&#x5E93;&#x5931;&#x8D25;");
    }
}
//&#x521B;&#x5EFA;&#x8868;
+(void)createTable
{
        //&#x521B;&#x5EFA;&#x8868;
        const char *sql="create table if not exists t_shop(id integer primary key,name text not null,price real);";
        char *errmsg=NULL;
        sqlite3_exec(db, sql, NULL, NULL, &errmsg);
        if (errmsg) {
            NSLog(@"&#x521B;&#x8868;&#x5931;&#x8D25;---%s",errmsg);
        }else{
            NSLog(@"&#x521B;&#x8868;&#x6210;&#x529F;---%s",errmsg);
        }
}
//&#x63D2;&#x5165;&#x6570;&#x636E;
+(void)insertTable:(Shop *)shop
{
    NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_shop(name, price) VALUES ('%@', %f);",shop
                     .name, shop.price];
    sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL);
}
//&#x67E5;&#x8BE2;&#x6570;&#x636E;
+(NSMutableArray *)selectTableAll
{
    NSMutableArray *array=[NSMutableArray array];

    const char *sql="select name,price from  t_shop;";
    //stmt&#x7528;&#x6765;&#x53D6;&#x51FA;&#x67E5;&#x8BE2;&#x7ED3;&#x679C;&#x7684;
    sqlite3_stmt *stmt=NULL;
    int status=sqlite3_prepare(db, sql, -1, &stmt, NULL);
    if (status==SQLITE_OK) { //&#x51C6;&#x5907;&#x6210;&#x529F;-- SQL&#x8BED;&#x53E5;&#x6B63;&#x786E;
        while(sqlite3_step(stmt)==SQLITE_ROW) {
            Shop *shop=[[Shop alloc]init];
            const unsigned char *name=sqlite3_column_text(stmt, 0);
            const unsigned char *price=sqlite3_column_text(stmt, 1);
            shop.name=[NSString stringWithUTF8String:name];
            shop.price=[[NSString stringWithUTF8String:price] floatValue];
            [array addObject:shop];
        }
    }
    return array;
}

//&#x66F4;&#x65B0;&#x6570;&#x636E;
+(void)updateTable
{
    NSString *sql = [NSString stringWithFormat:@"update t_shop set price=%u;",arc4random()%5];
    sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL);
}
//&#x5220;&#x9664;&#x8868;&#x683C;&#x6570;&#x636E;
+(void)deleteTable
{
    NSString *sql = [NSString stringWithFormat:@"delete from t_shop"];
    sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL);
}
@end
</sqlite3.h>

4.3 ViewController中按钮对象的操作

#import "ViewController.h"
#import "SQLite3Tools.h"
#import "Shop.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

}
//&#x521B;&#x5EFA;&#x8868;
- (IBAction)createTableBtn:(UIButton *)sender
{
    [SQLite3Tools createTable];
}
//&#x63D2;&#x5165;&#x6570;&#x636E;

- (IBAction)insertTableBtn
{
    Shop *shop=[[Shop alloc]init];
    shop.name=[NSString stringWithFormat:@"&#x767D;&#x83DC;-%d",arc4random() % 200];
    shop.price=(arc4random() % 10);

    [SQLite3Tools insertTable:shop];
    //&#x6267;&#x884C;&#x67E5;&#x8BE2;
    [self selectTableBtn];

}
//&#x67E5;&#x8BE2;&#x6570;&#x636E;&#x5E93;
- (IBAction)selectTableBtn
{
   NSMutableArray *array= [SQLite3Tools selectTableAll];
    for (Shop *shop in array) {
        NSLog(@"shop:name=%@,price=%f",shop.name,shop.price);
    }
}
//&#x66F4;&#x65B0;&#x6570;&#x636E;&#x5E93;
- (IBAction)updateTableBtn
{
    NSLog(@"&#x66F4;&#x65B0;&#x524D;&#x6570;&#x636E;&#xFF1A;");
    [self selectTableBtn];
    [SQLite3Tools updateTable];
    NSLog(@"&#x66F4;&#x65B0;&#x540E;&#x6570;&#x636E;&#xFF1A;");
    [self selectTableBtn];
}
//&#x5220;&#x9664;&#x8868;&#x683C;&#x6570;&#x636E;
- (IBAction)deleteTableBtn
{
    NSLog(@"&#x5220;&#x9664;&#x524D;&#x6570;&#x636E;&#xFF1A;");
    [self selectTableBtn];
    [SQLite3Tools deleteTable];
    NSLog(@"&#x5220;&#x9664;&#x540E;&#x6570;&#x636E;&#xFF1A;");
    [self selectTableBtn];
}
@end

4.4 效果图(点击后,可在控制台和Navicat中查看结果)

IOS开发之——数据库-SQLite3(03)
其中,sqlite文件,可在沙盒的Documents下找到对应的.sqlite,使用Navicat打开即可
IOS开发之——数据库-SQLite3(03)

; 五 参考

Original: https://blog.csdn.net/Calvin_zhou/article/details/124365865
Author: PGzxc
Title: IOS开发之——数据库-SQLite3(03)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/816584/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球