使用iOS原生sqlite3框架对sqlite数据库进行操作(一)

简介: 使用iOS原生sqlite3框架对sqlite数据库进行操作

使用iOS原生sqlite3框架对sqlite数据库进行操作


一、引言


     sqlite数据库是一种小型数据库,由于其小巧与简洁,在移动开发领域应用深广,sqlite数据库有一套完备的sqlite语句进行管理操作,一些常用的语句和可视化的开发工具在上篇博客中有介绍,地址如下:


sqlite数据库常用语句及可视化工具介绍:http://my.oschina.net/u/2340880/blog/600820


     在iOS的原生开发框架中可以对sqlite数据库进行很好的支持,这个框架中采用C风格且通过指针移动进行数据的操作,使用起来有些不便,我们可以对一些数据库的常用操作进行一些面向对象的封装。


二、libsqlite3系统库中操作数据库的常用方法

   libsqlite3是对sqlite数据库进行操作的系统库,在使用前,我们需要先导入,点击Xcode的Build Phases标签,展开Link Binary With Libraries,点击+号,在弹出的窗口中搜索libsqlite3.0,将其导入进工程,过程如下图:

image.png

image.png






在需要操作sqlite数据的文件中导入如下头文件:


#import <sqlite3.h>


数据库文件的操作是由一个sqlite3类型的指针操作管理的,如下方法进行数据库的打开:


sqlite3 *sqlite;

sqlite3_open(dataBaePath, &sqlite)


sqlite3_open方法返回一个int值,实际上,在使用libsqlite3框架中的大多方法时都会返回一个int值,这个int值代表着方法执行的相应结果状态,这些状态再sqlite3.h文件中通过宏来定义,列举如下:


#define SQLITE_OK           0   //操作成功

/* 以下是错误代码 */

#define SQLITE_ERROR        1   /* SQL数据库错误或者丢失*/

#define SQLITE_INTERNAL     2   /* SQL内部逻辑错误 */

#define SQLITE_PERM         3   /* 没有访问权限 */

#define SQLITE_ABORT        4   /* 回调请求终止 */

#define SQLITE_BUSY         5   /* 数据库文件被锁定 */

#define SQLITE_LOCKED       6   /* 数据库中有表被锁定 */

#define SQLITE_NOMEM        7   /* 分配空间失败 */

#define SQLITE_READONLY     8   /* 企图向只读属性的数据库中做写操作 */

#define SQLITE_INTERRUPT    9   /* 通过sqlite3_interrupt()方法终止操作*/

#define SQLITE_IOERR       10   /* 磁盘发生错误 */

#define SQLITE_CORRUPT     11   /* 数据库磁盘格式不正确 */

#define SQLITE_NOTFOUND    12   /* 调用位置操作码 */

#define SQLITE_FULL        13   /* 由于数据库已满造成的添加数据失败 */

#define SQLITE_CANTOPEN    14   /* 不法打开数据库文件 */

#define SQLITE_PROTOCOL    15   /* 数据库锁协议错误 */

#define SQLITE_EMPTY       16   /* 数据库为空 */

#define SQLITE_SCHEMA      17   /* 数据库模式更改 */

#define SQLITE_TOOBIG      18   /* 字符或者二进制数据超出长度 */

#define SQLITE_CONSTRAINT  19   /* 违反协议终止 */

#define SQLITE_MISMATCH    20   /* 数据类型不匹配 */

#define SQLITE_MISUSE      21   /* 库使用不当 */

#define SQLITE_NOLFS       22   /* 使用不支持的操作系统 */

#define SQLITE_AUTH        23   /* 授权拒绝 */

#define SQLITE_FORMAT      24   /* 辅助数据库格式错误 */

#define SQLITE_RANGE       25   /* sqlite3_bind 第二个参数超出范围 */

#define SQLITE_NOTADB      26   /* 打开不是数据库的文件 */

#define SQLITE_NOTICE      27   /* 来自sqlite3_log()的通知 */

#define SQLITE_WARNING     28   /* 来自sqlite3_log() 的警告*/

#define SQLITE_ROW         100  /* sqlite3_step() 方法准备好了一行数据 */

#define SQLITE_DONE        101  /* sqlite3_step() 已完成执行*/


执行非查询类的语句,例如创建,添加,删除等操作,使用如下方法:


char * err;

sqlite3 *sql;

sqlite3_exec(sql, sqlStr, NULL, NULL, &err);


sqlite3_exec方法中第一个参数为成功执行了打开数据库操作的sqlite3指针,第二个参数为要执行的sql语句,最后一个参数为错误信息字符串。


执行查询语句的方法比较复杂,通过如下方法:


   sqlite3 * sqlite;

   sqlite3_stmt *stmt =nil;

   int code = sqlite3_prepare_v2(sqlite, sqlStr, -1, &stmt, NULL);

    while (sqlite3_step(stmt)==SQLITE_ROW) {

        char * cString =(char*)sqlite3_column_text(stmt, 0);

        NSString * value = [NSString stringWithCString:cString?cString:"NULL" encoding:NSUTF8StringEncoding];

        NSNumber * value = [NSNumber numberWithLongLong:sqlite3_column_int64(stmt, 1)];

       }

        sqlite3_finalize(stmt);


stmt是一个数据位置指针,标记查询到数库的数据位置,sqlite3_prepare_v2()方法进行数据库查询的准备工作,第一个参数为成功打开的数据库指针,第二个参数为要执行的查询语句,第三个参数为sqlite3_stmt指针的地址,这个方法也会返回一个int值,作为标记状态是否成功。


sqlite3_step方法对stmt指针进行移动,会逐行进行移动,这个方法会返回一个int值,如果和SQLITE_ROW宏对应,则表明有此行数据,可以通过while循环来对数据进行读取。


sqlite3_column_XXX()是取行中每一列的数据,根据数据类型的不同,sqlite3_column_XXX()有一系列对应的方法,这个方法中第一个参数是stmt指针,第二个参数为列序号。


sqlite3_finalize()方法对stmt指针进行关闭。

目录
相关文章
|
3月前
|
搜索推荐 数据管理 定位技术
iOS应用开发中有多种主流框架
iOS应用开发中有多种主流框架
289 60
|
2月前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
141 66
|
2月前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
333 15
|
3月前
|
iOS开发 开发者
探索iOS开发中的SwiftUI框架
【10月更文挑战第39天】在苹果的生态系统中,SwiftUI框架以其声明式语法和易用性成为开发者的新宠。本文将深入SwiftUI的核心概念,通过实际案例展示如何利用这一框架快速构建用户界面,并探讨其对iOS应用开发流程的影响。
|
3月前
|
存储 SQL 数据库
数据库知识:了解SQLite或其他移动端数据库的使用
【10月更文挑战第22天】本文介绍了SQLite在移动应用开发中的应用,包括其优势、如何在Android中集成SQLite、基本的数据库操作(增删改查)、并发访问和事务处理等。通过示例代码,帮助开发者更好地理解和使用SQLite。此外,还提到了其他移动端数据库的选择。
66 8
|
4月前
|
移动开发 网络协议 小程序
基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v9.1版已发布
RainbowChat是一套基于开源IM聊天框架 MobileIMSDK 的产品级移动端IM系统。RainbowChat源于真实运营的产品,解决了大量的屏幕适配、细节优化、机器兼容问题
84 5
|
3月前
|
开发框架 Dart Android开发
安卓与iOS的跨平台开发:Flutter框架深度解析
在移动应用开发的海洋中,Flutter作为一艘灵活的帆船,正引领着开发者们驶向跨平台开发的新纪元。本文将揭开Flutter神秘的面纱,从其架构到核心特性,再到实际应用案例,我们将一同探索这个由谷歌打造的开源UI工具包如何让安卓与iOS应用开发变得更加高效而统一。你将看到,借助Flutter,打造精美、高性能的应用不再是难题,而是变成了一场创造性的旅程。
|
4月前
|
Swift iOS开发 开发者
探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】在苹果生态系统中,SwiftUI的引入无疑为iOS应用开发带来了革命性的变化。本文将通过深入浅出的方式,带领读者了解SwiftUI的基本概念、核心优势以及如何在实际项目中运用这一框架。我们将从一个简单的例子开始,逐步深入到更复杂的应用场景,让初学者能够快速上手,同时也为有经验的开发者提供一些深度使用的技巧和策略。
73 1
|
4月前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
68 4
|
4月前
|
存储 关系型数据库 数据库
轻量级数据库的利器:Python 及其内置 SQLite 简介
轻量级数据库的利器:Python 及其内置 SQLite 简介
98 3

热门文章

最新文章