iOS开发数据存储篇—libsqlite3和FMDB的基本使用和区别

Linux下sqlite库安装以及编译测试 Linux下sqlite库安装以及编译测试 一、sqlite代码库下载获取: https://www.sqlite.org/2016/sqlite-autoconf-3110000.tar.gz 二、解压安装编译操作: ①下载后放到共享文件夹准备进行解压 1)可以在虚拟机设置的选项中进行查看自己共享文件夹,或者重新添加新的共享文件夹 2)跳转到共享文件夹目录:cd /mnt/hgfs Ubantu无法显示共享文件夹可使用以下命令(治标不治本,▲文件夹不可用中文): sudo vmhgfs-fuse . 阅读详情

一、简要介绍

libsqlite3是IOS中纯C语言操作Sqlite数据库的一个库文件。使用起来和OC面向对象的方式有点别扭,不是特别的方便。
FMDB是IOS平台的SQLite数据库框架,以OC的方式封装了SQLite的C语言的API。FMDB使用起来更加的面向对象,省去了很多麻烦、冗余的C语言代码,对比苹果自带的Core Data框架,更加的轻量级和灵活。提供了多线程安全的数据库操作的方法,有效的防止数据混乱。开源地址为https://github.com/ccgus/fmdb。

下面我们就对比他们两者的使用,好坏优劣立马就可以分晓。

二、基本使用和对比

1.数据库操作对象

C语言方式:

sqlite3 *_db;

FMDB方式:

FMDatabase *db;
2.打开数据库

C语言方式:

- (void)openDB{
    //获取数据库文件路径
    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *fileName = [doc stringByAppendingPathComponent:@"students.sqlite"];

    //将OC字符串转换为c语言的字符串
    const char *cfileName = fileName.UTF8String;

    //打开数据库文件(如果数据库文件不存在,那么该函数会自动创建数据库文件)
    int result = sqlite3_open(cfileName, &_db);
    if (result == SQLITE_OK) {//打开成功
        NSLog(@"成功打开数据库");
    }else{
        NSLog(@"打开数据库失败");
    }
}

FMDB方式:

- (void)openDB{
    //1、获取数据库文件路径
    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *fileName = [doc stringByAppendingPathComponent:@"students.sqlite"];

    //2、获取数据库连接
    _db = [FMDatabase databaseWithPath:fileName];

    //3、打开数据库连接
    if ([_db open]) {
        NSLog(@"打开数据库成功");
    }else{
        NSLog(@"打开数据库失败");
    }

}
3.创建表格

C语言方式:

- (void)createTable{
    //创建表
    const char *sql = "CREATE TABLE IF NOT EXISTS t_student(id integer PRIMARY KEY AUTOINCREMENT,name text NOT NULL,age integer NOT NULL);";
    char *errmsg= NULL;
    int result = sqlite3_exec(_db, sql, NULL, NULL, &errmsg);
    if (result==SQLITE_OK) {
        NSLog(@"创建表成功");
    }else{
        NSLog(@"创建表失败---%s",errmsg);
    }
}

FMDB方式:

- (void)createTable{
    BOOL result = [_db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"];
    if (result) {
        NSLog(@"创建表格成功");
    }else{
        NSLog(@"创建表格失败");
    }
}
4.插入数据

C语言方式:

- (void)insertData{
    //插入数据
    for (int i=0; i<10; i++) {
        //拼接sql语句
        NSString *name = [NSString stringWithFormat:@"yixiangboy--%d",arc4random_uniform(100)];
        int age = arc4random_uniform(20)+10;
        NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_student (name,age) VALUES ('%@',%d);",name,age];

         //执行SQL语句
        char *errmsg = NULL;
        sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg);
        if (errmsg) {//如果有错误信息
            NSLog(@"插入数据失败--%s",errmsg);
        }else{
            NSLog(@"插入数据成功");
        }
    }
}

FMDB方式:

- (void)insertData{
    for (int i=0; i<10; i++) {
        NSString *name = [NSString stringWithFormat:@"yixiang-%d",arc4random_uniform(100)];
        int age = arc4random_uniform(20)+10;
        BOOL result = [_db executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);",name, @(age)];
        if (result) {
            NSLog(@"插入成功");
        }else{
            NSLog(@"插入失败");
        }
    }
}
5.删除数据

C语言方式:

- (void)deleteData{
    //删除age小于15的数据
    NSString *sql = [NSString stringWithFormat:@"DELETE FROM t_student WHERE age<15"];
    char *errmsg = NULL;
    sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg);
    if (errmsg) {
        NSLog(@"删除数据失败");
    }else{
        NSLog(@"删除数据成功");
    }
}

FMDB方式:

- (void)deleteData{
    BOOL result = [_db executeUpdate:@"DELETE FROM t_student WHERE age<15"];
    if (result) {
        NSLog(@"删除成功");
    }else{
        NSLog(@"删除失败");
    }
}
6.更新数据

C语言方式:

- (void)updateData{
    //大于20岁的都置为20岁
    NSString *sql = [NSString stringWithFormat:@"UPDATE t_student set age=20 WHERE age>20"];
    char *errmsg = NULL;
    sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg);
    if (errmsg) {
        NSLog(@"更新数据失败");
    }else{
        NSLog(@"更新数据成功");
    }
}

FMDB方式:

- (void)updateData{
    BOOL result = [_db executeUpdate:@"UPDATE t_student set age=20 WHERE age>20"];
    if (result) {
        NSLog(@"更新成功");
    }else{
        NSLog(@"更新失败");
    }
}
7.查询数据

C语言方式:

- (void)queryData{
    const char *sql = "SELECT id,name,age FROM t_student WHERE age<20";
    sqlite3_stmt *stmt = NULL;

    //进行查询前的准备工作
    if(sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL)==SQLITE_OK){//SQL语句没有问题
        NSLog(@"查询语句没有问题");

        //每调用一次sqlite3_step函数,stmt就会指向下一条记录
        while (sqlite3_step(stmt)==SQLITE_ROW) {//找到一条记录
            //取出数据
            //(1)取出第0个字段的值(int)
            int ID=sqlite3_column_int(stmt, 0);
            //(2)取出第一列字段的值(text)
            const unsigned char *name = sqlite3_column_text(stmt, 1);
            //(3)取出第二列字段的值(int)
            int age = sqlite3_column_int(stmt, 2);

            printf("%d %s %d\n",ID,name,age);
        }
    }else{
        NSLog(@"查询语句有问题");
    }
}

FMDB方式:

- (void)queryData{
    FMResultSet *resultSet = [_db executeQuery:@"SELECT * FROM t_student WHERE age > ?",@(20)];

    while ([resultSet next]) {
        int ID = [resultSet intForColumn:@"id"];
        NSString *name = [resultSet stringForColumn:@"name"];
        int age = [resultSet intForColumn:@"age"];
        NSLog(@"%d %@ %d",ID,name,age);
    }
}
Sqlite3 生成lib库文件 特此记录!QT使用SQL一般有两种方式No1,使用Qt内部的Sql模块No2,不通过Qt的Sql模块,直接使用Sqlite的lib库,使用Sqlite的标准C/C++接口就行接下来主要针对第二种。第一步,进入官网。 阅读详情

相关推荐

sqlite3.lib库文件

sqlite3编译时需要,vc6不能自己生成,所以直接复制到工作空间,即可进行编译

libsqlite3 mysql_sqlite3使用 | 学步园

二、交叉编译 (以下全是在redhat中,用root用户操作)1、下载SQLite-3.5.8.tar.gz2、在root的.bash_profile中加入以下环境变量以方便操作PATH=$PATH:/usr/local/arm/3.4.1/bin3、解压SQLite-3.5.8.tar.gz到任意目录(比如:/test/SQLite-3.5.8)#tarzxvfSQLite-3.5....

weixin_33428613的博客 625

Python爬虫(一)京东商品价格及详情页抓取

这是一个以http://item.jd.com/2957726.html为例的单网页抓取案例 import urllib.request; #载入urllib.request,用于获取页面html源代码 from pandas import Series; #载入series包 from pandas import DataFrame; #载入dataframe包 from bs4 impo

Data Proc 1万+

Sqlite3与C应用实例

引言我们这篇文章主要讲述了如何在C/C++语言中调用 sqlite 的函数接口来实现对数据库的管理, 包括创建数据库、创建表格、插入数据、查询数据、删除数据等。 说明 这里我们假设你已经编译好了sqlite的库文件 : libsqlite3.a libsqlite3.la libsqlite3.so libsqlite3.so.0 libsqlite3.so.0.8.6 pkgconf

xxgxgx的专栏 935

Vue3 + OpenLayers 开发指南(一) - 环境搭建与基础配置

本文详细介绍了如何从零开始搭建Vue3与OpenLayers的集成开发环境。通过项目初始化、核心依赖安装、目录结构规划及基础配置,手把手引导开发者创建一个结构清晰、可维护的现代化WebGIS应用骨架,为后续添加地图图层和交互功能奠定坚实基础。

weixin_28049429的博客 339

简单初识 Material Point Method(MPM)

简单初识 Material Point Method(MPM):先介绍了Lagrangian和Eulerian,并简单介绍了MPM Method

qq_45776432的博客 7365

IOS开发数据存储篇—libsqlite3和FMDB的基本使用和区别

一、简要介绍libsqlite3是IOS中纯C语言操作Sqlite数据库的一个库文件。使用起来和OC面向对象的方式有点别扭,不是特别的方便。FMDB是IOS平台的SQLite数据库框架,以OC的方式封装了SQLite的C语言的API。FMDB使用起来更加的面向对象,省去了很多麻烦、冗余的C语言代码,对比苹果自带的Core Data框架,更加的轻量级和灵活。提供了多线程安全的数据库操作的方法,有效的防

yixiangboy的博客 3135

利用kettle进行数据库数据比对

Kettle是一款国外开源的ETL工具,纯java编写,可以在Windows、Linux、Unix上运行,数据抽取高效稳定。本人用的版本是6.1。 之前用kettle这个开源的ETL工具是用来做数据抽取的,这次测试有个需求,是做数据库数据的比对。验证源表到目标表的逻辑正确,从而利用源表自己写SQL逻辑,生成的结果和目标表去比对。这次想到了利用kettle的数据比较功能,来做这些数据校验。 ...

多米诺DU的专栏 1万+

数据存储 - libsqlite3和FMDB的基本使用和区别

一、简要介绍 libsqlite3是IOS中纯C语言操作Sqlite数据库的一个库文件。使用起来和OC面向对象的方式有点别扭,不是特别的方便。 FMDB是IOS平台的SQLite数据库框架,以OC的方式封装了SQLite的C语言的API。FMDB使用起来更加的面向对象,省去了很多麻烦、冗余的C语言代码,对比苹果自带的Core Data框架,更加的轻量级和灵活。提供了多线程安全的数据库操作的方法,有...

宋卓的博客 374

PaddleOCR实战:从零开始打造专属OCR模型的完整指南

本文提供了一份从零开始使用PaddleOCR打造专属OCR模型的完整实战指南。内容涵盖环境搭建、数据标注与准备、模型训练与调优,以及最终的模型转换与部署。重点介绍了如何利用PaddleOCR进行模型训练,并整合PPOCRLabel等工具高效准备数据集,帮助开发者快速构建适用于特定场景的高精度OCR识别能力。

rl6adventurer的博客 733

ZYNQ程序固化实战:从BOOT.bin生成到QSPI/SD卡双启动模式详解

本文详细解析了ZYNQ 7000系列程序固化的完整流程,重点解决了程序断电丢失问题。通过实战演示,从生成BOOT.bin文件到配置QSPI与SD卡双启动模式,逐步指导开发者实现程序在外部存储中的永久驻留,确保产品脱离调试器独立运行。

weixin_29193259的博客 516

iOS开发数据存储—libsqlite3和FMDB的基本使用和区别

一、简要介绍 libsqlite3是iOS中纯C语言操作Sqlite数据库的一个库文件。使用起来和OC面向对象的方式有点别扭,不是特别的方便。 FMDB是IOS平台的SQLite数据库框架,以OC的方式封装了SQLite的C语言的API。FMDB使用起来更加的面向对象,省去了很多麻烦、冗余的C语言代码,对比苹果自带的Core Data框架,更加的轻量级和灵活。提供了多线程安全的数据库操

Nicholas的专栏 1869

控制科学与工程(自动化)保研经验【4】——浙大篇

控制科学与工程(自动化)保研经验【4】——浙大篇

Control Everything 1万+

数据存储 - FMDB源码分析(FMResultSet)

FMDB是IOS平台的SQLite数据库框架,以OC的方式封装了SQLite的C语言的API。FMDB使用起来更加的面向对象,省去了很多麻烦、冗余的C语言代码具体对比详见我的简书iOS开发数据存储篇—libsqlite3和FMDB的基本使用和区别,对比苹果自带的Core Data框架,更加的轻量级和灵活。提供了多线程安全的数据库操作的方法,有效的防止数据混乱。开源地址。 源码分析 FMDB源...

宋卓的博客 642

【原理图PCB专题】Cadence 17.4版本原理图及PCB 模块复用

在我们设计复杂板卡的时候,往往会遇到一部分电路被反复使用的情况。Cadence允许设计者一开始就将复用模块设计好,以后只要直接调用复用模块就可以直接用以设计更复杂的电路板了。这对于大规模集成设计无疑是非常好的选择,它不仅让设计者不必花费时间在相同模块反复设计上,更有利于电路的模块化设计。

一点硬件 2016

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SQLite、MySQL与PostgreSQL核心差异与选型指南:从嵌入式到企业级

关系型数据库作为现代应用数据存储的核心组件,其核心原理在于通过结构化查询语言(SQL)和ACID事务保证数据的一致性与可靠性。从技术价值看,不同的数据库管理系统在架构设计、并发控制与扩展性上存在显著差异,这直接决定了它们在各类应用场景中的适用性。例如,嵌入式场景追求零配置与轻量部署,而高并发Web服务则更注重读写吞吐与水平扩展能力。本文聚焦于SQLite、MySQL和PostgreSQL这三大主流数据库,通过对比其架构模型、功能特性与性能表现,为开发者在移动应用、Web服务及复杂分析系统等不同应用场景下的技

weixin_33895657的博客 546

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Linux sqlite3数据库安装与使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码

qq_45644525的博客 2058

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

libsqlite3 mysql_sqlite3开发环境搭建

SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,其占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的...

weixin_35179252的博客 823

Ubuntu18.04 sqlite3安装及其应用

ubuntu18.04 sqlite3安装及其应用 1. 安装sqlite3 sudo apt-get install sqlite3 sudo apt-get install libsqlite3-dev 2. 安装sqlite3可视化工具sqlitebrowser sudo apt-get install sqlitebrowser 3. sqlite3简单应用 #include <stdio.h> #include <stdlib.h> #include <sqli

Lotuscc的博客 7104

SQLite 入门笔记(一)

前言 由于项目需要,接触了 SQLite。在此记录下学习过程中的一些问题,以防日后忘记。 1. 什么是 SQLite? 以下引用来自百度百科 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/...

joden 639

(so easy)嵌入式数据库——sqlite

Sqlite数据库管理工具来操作sqlite数据库文件Sqlite打开数据库管理工具进行使用操作。

Linux驱动开发工程师,熟悉Linux/Android底层驱动、TP、显示、IIC、网络等通用外设调试适配,Linux上层应用开发。常用平台瑞芯微、全志、恩智浦等。 737

SQLite3 安装、基本操作

1. 安装SQLite3 sudo apt-get install sqlite3 2.安装Sqlite3编译需要的工具包 如果,你需要的话可以安装该工具包。只是为了体验一把,可以不安装。该项是可选项。 apt-get install libsqlite3-dev 3. 检查安装是否成功 执行下面命令,会出现sqlite版本号,如3.6.22 sqlite3 -

CodingMan 1万+

如何在Linux下用C/C++语言操作数据库sqlite3

作者:zieckey(zieckey@yahoo.com.cn)All Rights Reserved!0. 引言 我们这篇文章主要讲述了如何在C/C++语言中调用 sqlite 的函数接口来实现对数据库的管理,包括创建数据库、创建表格、插入数据、查询数据、删除数据等。 1. 说明这里我们假设你已经编译好了sqlite的库文件 :libsqlite3.a  libsqlite3.l

聪明的解释器 7197

Windows创建sqlite3的lib库

这是sqlite的官网下载地址,需要下载三个文件:下载后解压得到代码文件:dll选择一个就行,x86或者x64根据自己的需要下载。

pan_1214_的博客 1056

解决Android7.x找不到libsqlite.so 问题

解决Android7.x找不到libsqlite.so 问题 TargetSdkVersion 为24时,找不到libsqlite.so,导致App直接崩溃。 原因:一般某些聊天的SDK都依赖于libsqlite.so(环信、融云),不过由于这个包从来没有变化,使用的是系统默认提供的(/system/lib/)。在Android 6.x及以下的平台可以运行。 Android7.x执行更严

倾锋落颖花 1万+
上一篇: 数据库之FMDB源码解析一
下一篇: UIScrollViewDelegate详解
style_施
博客等级 码龄11年 11粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值