使用SQLite3存储和读取数据

SQLite3是嵌入在iOS中的关系型数据库,对于存储大规模的数据很有效。SQLite3使得不必将每个对象都加到内存中。

基本操作:

(1)打开或者创建数据库

sqlite3 *database;
int result = sqlite3_open("/path/databaseFile", &database);

如果/path/databaseFile不存在,则创建它,否则打开它。如果result的值是SQLITE_OK,则表明我们的操作成功。

注意上述语句中数据库文件的地址字符串前面没有@字符,它是一个C字符串。将NSString字符串转成C字符串的方法是:

const char *cString = [nsString UTF8String];

(2)关闭数据库

sqlite3_close(database);

(3)创建一个表格

char *errorMsg;
const char *createSQL = "CREATE TABLE IF NOT EXISTS PEOPLE (ID INTEGER PRIMARY KEY AUTOINCREMENT, FIELD_DATA TEXT)";
int result = sqlite3_exec(database, createSQL, NULL, NULL, &errorMsg);

执行之后,如果result的值是SQLITE_OK,则表明执行成功;否则,错误信息存储在errorMsg中。

sqlite3_exec这个方法可以执行那些没有返回结果的操作,例如创建、插入、删除等。

(4)查询操作

NSString *query = @"SELECT ID, FIELD_DATA FROM FIELDS ORDER BY ROW";
sqlite3_stmt *statement;
int result = sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil);

如果result的值是SQLITE_OK,则表明准备好statement,接下来执行查询:

while (sqlite3_step(statement) == SQLITE_ROW) {int rowNum = sqlite3_column_int(statement, 0);char *rowData = (char *)sqlite3_column_text(statement, 1);NSString *fieldValue = [[NSString alloc] initWithUTF8String:rowData];// Do something with the data here
}
sqlite3_finalize(statement);

使用过其他数据库的话应该很好理解这段语句,这个就是依次将每行的数据存在statement中,然后根据每行的字段取出数据。

(5)使用约束变量

实际操作时经常使用叫做约束变量的东西来构造SQL字符串,从而进行插入、查询或者删除等。

例如,要执行带两个约束变量的插入操作,第一个变量是int类型,第二个是C字符串:

char *sql = "insert into oneTable values (?, ?);";
sqlite3_stmt *stmt;
if (sqlite3_prepare_v2(database, sql, -1, &stmt, nil) == SQLITE_OK) {sqlite3_bind_int(stmt, 1, 235);sqlite3_bind_text(stmt, 2, "valueString", -1, NULL);
}
if (sqlite3_step(stmt) != SQLITE_DONE)NSLog(@"Something is Wrong!");
sqlite3_finalize(stmt);

这里,sqlite3_bind_int(stmt, 1, 235);有三个参数:

第一个是sqlite3_stmt类型的变量,在之前的sqlite3_prepare_v2中使用的。

第二个是所约束变量的标签index。

第三个参数是要加的值。

有一些函数多出两个变量,例如

sqlite3_bind_text(stmt, 2, "valueString", -1, NULL);

这句,第四个参数代表第三个参数中需要传递的长度。对于C字符串来说,-1表示传递全部字符串。

第五个参数是一个回调函数,比如执行后做内存清除工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433207.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NCBI SRA数据预处理

SRA数据的的处理流程大概如下 一、SRA数据下载、 NCBI 上存储的数据现在大都存储为SRA格式。 下载以后就是以SRA为后缀名。 这里可以通过三种方式下载SRA格式的数据。 1.通过http方式,2.通过ftp方式,3.通过Aspera Aspera可以在NCBI网站上下载。 参阅&…

化浆池是什么东西_一种双工位浆化池的制作方法

本发明涉及铋矿用生产设备技术领域,具体的说是一种双工位浆化池。背景技术:铋在自然界中以游离金属和矿物的形式存在。铋的主要矿物有自然铋辉铋矿、铋华、以及菱铋矿、铜铋矿等,其中以辉铋矿与铋华为最重要。铋的矿物大都与钨、钼、铅、锡、…

Linux下,sqlite简单实例

#include "stdlib.h"#include "stdio.h"#include "sqlite3.h"int main(){charcSql[1024] {0};sqlite3*pSql NULL;char *pError NULL;int i 0, j 0;char**ppTableData NULL;int nRow 0, nColumn 0;int pos 0;//打开数据库sqlite3_open("…

linux编程参数列表,Linux编程 14 文件权限(用户列表passwd,用户控制shadow,useradd模板与useradd命令参数介绍)...

一. 概述linux安全系统的核心是用户账户。 创建用户时会分配用户ID(UID)。 UID是唯一的,但在登录系统时不是用UID,而是用登录名。在讲文件权限之之前,先了解下linux是怎样处理用户账户的。以及用户账户需要的文件和工具,这样处理文…

GitHub托管BootStrap资源汇总(持续更新中…)

Twitter BootStrap已经火过大江南北,对于无法依赖美工的程序员来说,这一成熟前卫的前端框架简直就一神器,轻轻松松地实现出专业的UI效果。GitHub上相关的的开源项目更是层出不穷,在此整理列举一些感觉不错的组件或增强实现&#x…

Sqlite3_prepare

这个函数将sql文本转换成一个准备语句(prepared statement)对象,同时返回这个对象的指针。这个接口需要一个数据库连接指针以及一个要准备的包含SQL语句的文本。它实际上并不执行(evaluate)这个SQL语句,它仅…

python爬虫框架scrapy实例详解_python爬虫框架scrapy实例详解

生成项目scrapy提供一个工具来生成项目,生成的项目中预置了一些文件,用户需要在这些文件中添加自己的代码。打开命令行,执行:scrapy startproject tutorial,生成的项目类似下面的结构tutorial/scrapy.cfgtutorial/__in…

themyleaf 图片上传_javaEE --springboot #实现图片上传和回显 #单文件上传 #多文件上传 #ajax异步文件上传 (非常详细,从创建项目开始)...

实现文件上传和回显1、新建一个SpringBoot项目,选择 Spring Web 和 thymeleaf 依赖 。pow.xml文件下的依赖如下2、根据下图,创建如下文件3、直接上代码配置文件 application.xmlserver:port: 8005file:upload:path: F://upload/relationImg: /images/配置…

sqlite3_setp

这个过程用于执行有前面sqlite3_prepare创建的准备语句。这个语句执行到结果的第一行可用的位置。继续前进到结果的第二行的话,只需再次调用sqlite3_setp()。继续调用sqlite3_setp()知道这个语句完成,那些不返回结果的语句(如:INS…

aix linux运维,运维老司机分享的八个AIX日常运维经验及案例

原文来自微信公众号:AIX专家俱乐部【经验分享】在AIX启动时,打开debug模式经常遇到aix无法启动,但又不知道pending在哪,因此打开启动过程的debug模式,对于诊断问题有很大的帮帮助。下面是打开debug的方法:打…

Mysql找不到mysql.sock怎么办?

1. #ps -aux|grep mysql 找mysql的进程. #kill mysql进程号 确定全部kill光 2.直接跳第3步,无效再使用第2步 /usr/local/mysql/bin/mysqld_safe --usermysql & 启动mysql. bin/mysql -u root -p 登陆mysql 3. 重启mysql服务,可以到mysql的安装目录下…

ssr无法在win10使用_Win10疑难解答无法使用怎么办-百度经验

Win10疑难解答无法使用的解决方法Win10系统打开疑难解答工具时只显示“出于安全考虑,某些设置由组策略控制”,怎么办?1、打开Windows10系统的控制面板,双击疑难解答,出现提示:出于安全考虑,某些…

sqlite3_column

这个过程从执行sqlite3_step()执行一个准备语句得到的结果集的当前行中返回一个列。每次sqlite3_step得到一个结果集的列停下后,这个过程就可以被多次调用去查询这个行的各列的值。对列操作是有多个函数,均以sqlite3_column为前缀 const void *sqlite3_…

linux中将hdfs数据导入hbase,将数据文件导入到HBase中

假设有一个TSV格式的数据文件test.dat(TSV是指数据文件中的每个字段是以制表符隔开的)首先,将test.dat上传到hdfs上,具体的命令如下:hadoop fs -copyFromLocal test.dat的路径名 /tmp/test.dat(/tmp是hdfs上的一个目录)执行以下命令就可以查…

ios13看怎么airpods电量_iPhoneXR查看airpods蓝牙耳机电量的三种方法

AirPods是苹果公司研发的一款蓝牙耳机,与方法一、当 AirPods 与 iPhoneXR 已经自动配对连接,这时想看耳机和盒子电量,只要在 iPhoneXR 屏幕点亮或解锁的情况下,在手机旁边打开 AirPods 收纳盒的盖子,手机便会自动弹出耳…

sqlite3_finalize sqlite3_close

sqlite3_finalize int sqlite3_finalize(sqlite3_stmt *pStmt); 这个过程销毁前面被sqlite3_prepare创建的准备语句,每个准备语句都必须使用这个函数去销毁以防止内存泄露。 在空指针上调用这个函数没有什么影响,同时可以准备语句的生命周期的任一时刻…

人这辈子没法做太多的事情

人这辈子没法做太多的事情,所以每一件都要做得精彩绝伦。转载于:https://www.cnblogs.com/xiandedanteng/p/3291585.html

magicbook linux系统换w7,荣耀magicbook怎么安装win7 荣耀magicbook安装win7方法

荣耀magicbook 2019笔记本是一款2019年上市的时尚轻薄笔记本电脑,这款电脑采用了amd ryzen 5系列处理器以及性能级独立显卡,能够满足用户们日常娱乐使用需求,那么荣耀magicbook 2019笔记本怎么使用u启动u盘启动盘安装win7系统呢?今天为大家分…

php 区块链算法_PoW/BFT等5种主流区块链共识算法的开源代码实现

共识算法是实现自主产权区块链的必不可少的关键环节,本文列出社区中相对成熟的区块链共识算法开源实现,包括BFT共识、Raft共识、Paxos共识、PoW共识等,可供希望开发自主产权区块链的团队参考学习。相关推荐:区块链开发系列教程1、…

makefile 的export问题

from http://againinput4.blog.163.com/blog/static/172799491201132693532418/ 1.在(parent,上层的)makefile中export出来变量,子makefile(sub make)中,是可以访问的。 2. 而同一级别的makefil…