在iPhone的开发过程中常常会用到数据库,而SQLite3是iPhone中支持的数据库。下面简单介绍一下iPhone中SQLite3数据库的用法:

SQLite3简介

SQLite3是一个轻量级的数据库,完全使用C语言编写,使用简单方便。它是一个嵌入到程序进程的数据库,和其他一些数据库(MySQL,MS SQL)不同,它没有独立的进程。

1、打开数据库

首先声明一个数据库变量

sqlite3 *db = NULL;

每一个SQLite3都是一个文件,打开一个数据库只需要调用一次sqlite3_open函数:

SQLITE_API int sqlite3_open(

const char *filename,   /* Database filename (UTF-8) */

sqlite3 **ppDb          /* OUT: SQLite db handle */

);

filename是数据库的路径,ppDb是指向返回的sqlite3数据库,返回SQLITE3_OK则表示正常。比如我们打开Document目录下的“Test.db”数据库:

int result = sqlite3_open([dbPath UTF8String], &db);

NSAssert(result==SQLITE_OK, @”Can’t open database %@”, dbPath);

注意:如果dbPath路径下的数据库不存在,那么打开这个数据库将会创建一个空的数据库。

2、执行SQL语句

SQLite3有3种执行SQL语句的方法:

  • 通过sqlite3_exec()函数,适用于执行(非查询)语句:如CREATE TABLE、INSERT,REPLACE,DELETE等。

SQLITE_API int sqlite3_exec(

sqlite3*,                                  /* An open database */

const char *sql,                           /* SQL to be evaluated */

int (*callback)(void*,int,char**,char**),  /* Callback function */

void *,                                    /* 1st argument to callback */

char **errmsg                              /* Error msg written here */

);

比如我们要创建一个表示个人(person)的表,就可以使用sqlite3_exec()函数。person表中包括名字(name)、性别(gender)、年龄(age)和生日(birthday)这几个字段。代码如下:

char *errmsg = NULL;

result = sqlite3_exec(db, “CREATE TABLE person (”

“name TEXT,”

“gender INTEGER,”

“age INTEGER,”

“birthday DATE)”, NULL, NULL, &errmsg);

NSAssert(result==SQLITE_OK, @”Can’t CREATE TABLE: %s”, errmsg);


  • 通过sqlite3_get_table()函数,适用于查询语句SELECT。由于此函数返回一个字符串数组,因此对于要求结果为二进制数据(如图像数据)的不能用此函数返回。

SQLITE_API int sqlite3_get_table(

sqlite3 *db,          /* An open database */

const char *zSql,     /* SQL to be evaluated */

char ***pazResult,    /* Results of the query */

int *pnRow,           /* Number of result rows written here */

int *pnColumn,        /* Number of result columns written here */

char **pzErrmsg       /* Error msg written here */

);

例如我们要查询person中的所有数据:

char **table = NULL;

int row,col;

result = sqlite3_get_table(db, “SELECT name,age,birthday from person”, &table, &row, &col, &errmsg);

NSAssert(result==SQLITE_OK, @”SQL ERROR: %s”, errmsg);

那么字符串数组table中就包含所有的表信息,本例中每行3个元素(name、age和birthday),table第一行元素是字段名字,如table[0]是”name”,table[1]是”age”,table[2]是”birthday”。table的第二行才是实际的数据,如table[3]是”张三”,table[4]是”24″,table[5]是”1981-10-21 12:00:01″。

  • 通过sqlite3_prepare()、sqlite3_step()、sqlite3_bind_xxx()以及sqlite3_finalize()等一系列函数,可以逐行获取数据,并可以获取二进制数据。

sqlite3_prepare()用于编译一个SQL语句,返回一个sqlite3_stmt结构指针。sqlite3_stmt结构指针用于sqlite3_step()、sqlite3_bind_xxx()以及sqlite3_finalize()等函数中。sqlite3_step()用于将当前记录指向下一个。sqlite3_bind_xxx()等一系列函数会获取当前记录中各个字段对应的值。最后调用一下sqlite3_finalize()用于释放一些资源。

3、其他高级应用

3.1 创建内存数据库

通常SQLite3数据库存储在磁盘文件中,所以对数据库的读写等操作就会精彩的对磁盘文件进行读写。SQLite3也可以将数据库建立在内存中,但是要注意建立内存的数据是易失的(程序退出时内存便会释放)。我们知道磁盘的读写比内存的读写要慢很多很多,有时候我们对读写速度要求很高,但是对数据是否时持久保存并不感兴趣,这时使用内存数据库最好不过了。

创建内存数据库很简单,只需要把打开数据库的文件名改为“:memory:”即可。

int result = sqlite3_open(“:memory:”, &db);

NSAssert(result==SQLITE_OK, @”Can’t open database %@”, dbPath);

3.2 创建自定义SQL语句函数

有时候我们想定义一个函数来判断一个人是否满足结婚条件(男性大于22岁,女性大于20岁),可惜SQL语句中并没有提供如此复杂的判断。这时创建一个自定义函数是非常方便的。

static void db_func_canmarry(sqlite3_context *context, int argc, sqlite3_value **argv){

int gender = sqlite3_value_int(argv[0]);

int age = sqlite3_value_int(argv[1]);

int canmarry = 0;

if (gender == 0 && age > 22) {

canmarry = 1;

}

else if (gender == 1 && age > 20){

canmarry = 0;

}

sqlite3_result_int(context, canmarry);

}

定义好函数,把这个函数加入到数据库SQL语句中。

sqlite3_create_function(db, “CANMARRY”, 2, SQLITE_UTF8, NULL, &db_func_canmarry, NULL, NULL);

以后我们执行SQL语句SELECT * FROM person WHERE CANMARRY(gender,age) 就可以获取到所有满足结婚条件的人。

3.3 分页查询

数据库查询时常常碰到需要分页显示结果的情况,这时候我们使用SQL语句LIMIT关键字就非常方便了。比如返回20行起的10行数据

SELECT * FROM person WHERE CANMARRY(gender,age) LIMIT 20, 10

iOS数据库编程(Andy)相关推荐

  1. 一步一步学习iOS 5编程(第三版)-PDF中文版-正式发布!

    目前,这是第一本介绍iOS 5.x 和 Xcode 4.4 的中文版书籍,尤其适合于iOS 编程开发初学者.本教程由 EntLib.com 团队编写.如有任何技术问题,欢迎留言. 电子版 – PDF ...

  2. mysql 数据库编程_MySQL数据库编程(C++语言)

    MySQL数据库编程(C++语言) 发布时间:2018-05-24 21:06, 浏览次数:452 , 标签: MySQL 本文主要介绍使用C++语言连接和操作 MySQL 数据库的方法. 1. 准备 ...

  3. iOS网络编程开发-数据加密

    iOS网络编程开发-数据加密 一.简单说明 1.说明 在开发应用的时候,数据的安全性至关重要,而仅仅用POST请求提交用户的隐私数据,还是不能完全解决安全问题. 如:可以利用软件(比如Charles) ...

  4. IOS数据库操作SQLite3使用详解(转)

    iPhone中支持通过sqlite3来访问iPhone本地的数据库. 具体使用方法如下 1:添加开发包libsqlite3.0.dylib 首先是设置项目文件,在项目中添加iPhone版的sqlite ...

  5. IOS数据库操作SQLite3使用详解

    sqlite数据库iosdatabasesqlinteger 目录(?)[+] iPhone中支持通过sqlite3来访问iPhone本地的数据库. 具体使用方法如下 1:添加开发包libsqlite ...

  6. 我所理解的 iOS 并发编程

    作者:bool周 原文链接:我所理解的 iOS 并发编程 无论在哪个平台,并发编程都是一个让人头疼的问题.庆幸的是,相对于服务端,客户端的并发编程简单了许多.这篇文章主要讲述一些基于 iOS 平台的一 ...

  7. 对比.Net PetShop和Duwamish来探讨Ado.Net的数据库编程模式

    作者:卢彦 .NET PetShop和Duwamish简单介绍 相信大家一定听说过有名的"宠物店大战",没错,本文的主角之一就是获胜方.NET PetShop,微软号称以27倍的速 ...

  8. iOS网络编程-iCloud键值数据存储编程实例

    iCloud键值数据存储设计 iCloud键值数据存储编程实例,画面中有两个开关控件,左图是设备1点击"设置iCloud数据"按钮,将控件状态保存到iCloud服务器.右图是设备2 ...

  9. iOS代码编程规范 根据项目经验汇总

    带出几十位从零开始学iOS的实习生或试用期的开发人员后,觉得真的是千人千面,每个人写的代码都风格迥异,如果没有一个文档规范,每次都和新人进行口头的说教,大概自己是不用敲代码了,所以吃了亏了就开始编写i ...

  10. python3数据库编程_python3+PyQt5 数据库编程--增删改实例

    本文通过python3+pyqt5改写实现了python qt gui 编程变成15章的excise例子. #!/usr/bin/env python3 import os import sys fr ...

最新文章

  1. CCS5.5 中报错 Does not match the target type,not loaded 的一种情况
  2. linux 进程 崩溃被杀 原因查找
  3. java class扫描接口_JAVA 扫描指定路径下所有的jar包,并保存所有实现固定接口的类型...
  4. 学习笔记Hadoop(一)—— Hadoop介绍(1)——认识大数据
  5. hdu 1087 最大递增和
  6. Kotlin实战指南二十:flow
  7. 【Boost】Boost使用几条简单笔记
  8. 基于visual Studio2013解决面试题之1305字符串所有子集
  9. Kotlin基础学习第5章—表达式
  10. threejs学习第一天--3D地月环绕实战案例
  11. antdesign 柱状图_你绝对想不到柱形图背后有这么多故事
  12. php生成字符画,超易用的字符画在线生成器,非常适合制作STEAM展柜。
  13. 【模式匹配】之 —— Sunday算法
  14. aix系统挂载nas
  15. vsftpd failed - probably invalid config.
  16. 极客时间计算机组成原理学习笔记
  17. BigDecimal 判断大于小于
  18. 双通道内存和单通道的区别是什么
  19. 【开机进入Windows界面后键鼠失灵 伴随显示器黑屏或卡顿,解决过程】
  20. 业务系统里的Office文档如何在线编辑

热门文章

  1. swp安装(Scientific Work Place)
  2. 电商项目:高仿小米商城(API文档)
  3. 【网络安全】如何使用OpenSSL工具生成根证书与应用证书
  4. 前端程序员兼职?不妨来试试这几个方法
  5. Python期末考试
  6. 树莓派中的 IM 私有云支持多少并发?
  7. ESXI上检测磁盘状态
  8. CockroachDB改用授权BSL取代Apache 2.0
  9. Autovue 集成
  10. python 初学之环境配置及IED搭建