IOS嵌入式数据库SQLite3使用简析

【SQLite3+Qt开发】SQLite3简要介绍+在Qt5中的使用步骤 SQLite3简要介绍+在Qt5中使用步骤 阅读详情

1. Sqlite3数据类型及存储类

每个存放在sqlite数据库中(或者由这个数据库引擎操作)的值都有下面中的一个存储类:
(1)NULL,值是NULL
(2)INTEGER,值是有符号整形,根据值的大小以1,2,3,4,6或8字节存放
(3)REAL,值是浮点型值,以8字节IEEE浮点数存放
(4)TEXT,值是文本字符串,使用数据库编码(UTF-8,UTF-16BE或者UTF-16LE)存放
(5)BLOB,只是一个数据块,完全按照输入存放(即没有准换)
注:①Sqlite没有单独的布尔存储类型,它使用INTEGER作为存储类 型,0为false,1为true
②Sqlite没有另外为存储日期和时间设定一个存储类集,内置的sqlite日期和时间函数能够将日期和时间以TEXT,REAL或INTEGER形式存放
TEXT 作为IS08601字符串(”YYYY-MM-DD HH:MM:SS.SSS”)
REAL 从格林威治时间11月24日,4174 B.C中午以来的天数
INTEGER 从 1970-01-01 00:00:00 UTC以来的秒数

2. Sqlite3函数功能简介

1)基本函数及结构体

sqlite3 *pdb //数据库句柄,跟文件句柄FILE很类似
sqlite3_stmt *stmt //这个相当于ODBC的Command对象,用于保存编译好的SQL语句
sqlite3_open() //打开数据库
sqlite3_exec() //执行非查询的sql语句
sqlite3_prepare() //准备sql语句,执行select语句或者要使用parameter bind时 , 用这个函数(封装了sqlite3_exec).
sqlite3_step() //在调用sqlite3_prepare后,使用这个函数在记录集中移动。
sqlite3_close() //关闭数据库文件

2)绑定函数
int sqlite3_bind_null(sqlite3_stmt*, int);
int sqlite3_bind_int(sqlite3_stmt*, int, int);
int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*));
int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*));
3)取值函数
sqlite3_column_text(), 取text类型的数据
sqlite3_column_blob(),取blob类型的数据
sqlite3_column_int(), 取int类型的数据

3. Sqlite3使用步骤

1) 首先获取iPhone上Sqlite 3 的数据库文件的地址
2) 打开Sqlite 3 的数据库文件
3) 定义SQL文
4) 邦定执行SQL所需要的参数
5) 执行SQL文,并获取结果
6) 释放资源
7) 关闭Sqlite 3 数据库。

4. Sqlite3数据操作

由于整个例子代码比较繁琐,这里只列出数据库操作的部分代码作为参考:
1.添加开发包libsqlite3.0.dylib
首先是设置项目文件,在项目中添加iPhone版的sqlite3的数据库的开发包,在项目下的Frameworks点击右键,然后选择libsqlite3.0.dylib文件。
libsqlite3.0.dylib文件地址:
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.sdk/usr/lib/libsqlite3.0.dylib
2.获取sqlite3的数据库文件地址:
//数据库路径


   
  1.  -(NSString*)databasePath {   
  2.     NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);   
  3.     NSString *pathname = [path objectAtIndex:0];   
  4.     return [pathname stringByAppendingPathComponent:@"database.sqlite3"];   
  5. }   

3.打开数据库


   
  1.  - (BOOL)openDatabase   {   
  2.     if (sqlite3_open([[self databasePath] UTF8String],&database) != SQLITE_OK) {   
  3.         sqlite3_close(database); printf("failed to open the database");   
  4.         return NO;   
  5.     } else {  
  6.         printf("open the database successfully");   
  7.         return YES;   
  8.     }   
  9. }   

4.创建表
//创建TimerTable表


   
  1.  - (BOOL)createTimerTable {   
  2.     if ([self openDatabase]==YES) {   
  3.         char *erroMsg;   
  4.         NSString *createSQL = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@(timerid INTEGER PRIMARY KEY AUTOINCREMENT,time INTEGER,remaintime INTEGER,iconuri BLOB,vibrate INTEGER,status INTEGER,message TEXT)",TableName];   
  5.         if (sqlite3_exec(database, [createSQL UTF8String], NULL, NULL, &erroMsg)!= SQLITE_OK) {  
  6.             sqlite3_close(database);   
  7.             printf("create table faild");   
  8.             return NO;   
  9.         } else {   
  10.             printf("table was created"); return YES;   
  11.         }   
  12.     } else return NO;   
  13. }   

5.添加数据
//添加Timer


   
  1. - (BOOL)insertTimer:(TimerInfo *)timerInfo {   
  2.    bool isOpen=[self openDatabase];   
  3.    if (isOpen!=YES) {  
  4.        return NO;   
  5.    }   
  6.    sqlite3_stmt *statement;   
  7.    static char *insertTimerSql="INSERT INTO TimerTable(time,remaintime,iconuri,vibrate,status,message,type) VALUES (?,?,?,?,?,?)";   
  8.    if (sqlite3_prepare_v2(database,insertTimerSql,-1,&statement,NULL)!= SQLITE_OK) { NSLog(@"Error:Failed to insert timer"); return NO; } sqlite3_bind_int(statement,1,timerInfo.time);  
  9.    sqlite3_bind_int(statement,2,timerInfo.remainTime);   
  10.    sqlite3_bind_text(statement,3,[timerInfo.iconuri UTF8String],-1,SQLITE_TRANSIENT);  
  11.    sqlite3_bind_int(statement,4,timerInfo.vibrate);   
  12.    sqlite3_bind_int(statement,5,timerInfo.status);  
  13.    sqlite3_bind_text(statement,6,[timerInfo.message UTF8String],-1,SQLITE_TRANSIENT);  
  14.    int success=sqlite3_step(statement);   
  15.    sqlite3_finalize(statement);   
  16.    if(success==SQLITE_ERROR) {   
  17.        NSLog(@"Error:fail to insert into the database with message.");   
  18.        return NO;   
  19.    }   
  20.    NSLog(@"inserted one timer");   
  21.    return YES;   
  22.    

6.查询数据
//查询数据库中所有的TimerInfo,返回一个包含所有TimerInfo的可变数组


   
  1. -(NSMutableArray *)getAllTimers {  
  2.    NSMutableArray *arrayTimers=[[NSMutableArray alloc] init];   
  3.    NSString *queryStr=@"SELECT * FROM TimerTable";   
  4.    sqlite3_stmt *statement;   
  5.    if (sqlite3_prepare_v2(database, [queryStr UTF8String], -1, &statement, NULL)!=SQLITE_OK) {   
  6.        printf("Failed to get all timers!\n");   
  7.    } else {   
  8.        while (sqlite3_step(statement)==SQLITE_ROW) {   
  9.            TimerInfo *timerInfo=[[TimerInfo alloc] init];   
  10.            timerInfo.timerId =sqlite3_column_int(statement,0);   
  11.            timerInfo.time =sqlite3_column_int(statement,1);   
  12.            timerInfo.remainTime=sqlite3_column_int(statement,2);   
  13.            timerInfo.vibrate =sqlite3_column_int(statement,4);   
  14.            timerInfo.status = sqlite3_column_int(statement,5);   
  15.            char *messageChar=sqlite3_column_text(statement,6);   
  16.            if (messageChar==NULL)   
  17.                timerInfo.message=nil;   
  18.            else   
  19.                timerInfo.message =[NSString stringWithUTF8String:messageChar];   
  20.            [arrayTimers addObject:timerInfo]; [timerInfo release];   
  21.        }   
  22.    }  
  23.    sqlite3_finalize(statement);   
  24.    NSLog(@"arrayTimersCount: %i",[arrayTimers count]);   
  25.    return arrayTimers;   
  26.    

此外,还有数据库数据的更新及其删除操作就不再依依列出,它们之间只是执行的SQL文不同,其他部分的代码较为类似。

运行效果:(具体页面控件及事件:略)

注:由于我自己目前仍是IOS开发的初学者,在这里只是做下小结,其中难免有说的不对的地方,所以希望大家多多给予指正。
5. 参考链接

http://hi.baidu.com/nmjd1989/blog/item/de9b0947d6305295b2b7dc01.html

http://www.cnblogs.com/wengzilin/tag/SQLite3/

http://www.cnblogs.com/wengzilin/archive/2012/03/27/2419203.html


IOS swift版 sqlite3详解 IOS中的SQLite3的封装与详细应用SQLite是一个开源的嵌入式关系数据库,特点是易使用、高效、安全可靠、可移植性强。IOS中的本地持久化存储NSUserDefault:一般用于存储小规模数据、业务逻辑弱的数据。keychain: 苹果提供的可逆存储,因为有着只要app不重装系统、可以同步iCloud的特性,一般用来对用户的标识符或者一些需要加密的小数据进行存储。归档:主要原理是对数据进行序列 阅读详情

相关推荐

深入解析五大ADC芯片架构及其应用场景

本文深入解析了五大ADC芯片架构及其应用场景,包括逐次逼近型ADC、Σ-Δ型ADC、流水线型ADC、闪存型ADC和积分型ADC。通过详细的架构分析和实际应用案例,帮助工程师理解不同ADC芯片的特点和适用场景,提升电路设计效率。

weixin_28702105的博客 356

sqlite3_column

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

savagelin的专栏 1334

ATE自动化测试设备:硬件与软件的完美协同

本文深入解析了ATE自动化测试设备如何通过硬件与软件的完美协同,实现高效、精准的电子产品测试。文章详细阐述了ATE系统的硬件架构(如测试控制器、仪器模块、开关矩阵)与软件层次(如测试管理、仪器控制、数据分析),并结合实战案例,揭示了软硬件协同设计在提升测试效率与可靠性中的关键作用。

weixin_29218509的博客 168

sqlite3:sqlite3_column 函数

该函数实例用于 查询(query)结果的筛选,返回当前结果的某1列。 常用函数为: int sqlite3_column_int(sqlite3_stmt*, int iCol); double sqlite3_column_double(sqlite3_stmt*, int iCol); const unsigned char *sqlite3_column_text(sqlite...

猪哥的专栏 1万+

安卓应用锁开发实战:如何通过拦截Activity启动实现密码验证(附完整代码)

本文深入探讨了在安卓系统中开发应用锁功能的两种实战方案:通过修改ActivityStarter源码或实现IActivityController接口来拦截Activity启动流程,从而实现启动前的密码验证。文章详细对比了两种方案的技术选型、实现细节与适用场景,并提供了处理隐式Intent、验证状态管理等核心问题的完整代码,为开发系统级安全功能提供了实用指南。

tcp8optimizer的博客 457

分类模型AUC低于0.5?5个常见坑点排查指南(附代码示例)

本文针对分类模型AUC低于0.5的常见问题,提供了5个关键排查点及代码示例。从样本分布失衡、特征与标签脱节到量纲差异、模型初始化和数据泄露,详细解析了可能导致AUC异常的原因,并给出实用的诊断方法和解决方案,帮助开发者快速提升模型性能。

weixin_29190169的博客 240

IOS使用项目中的本地数据库简单操作

之前在安卓中做过项目通过本地的SQLITE数据库的项目,现在有了iphone,于是也想把它转到ios上 经过一天的学习,终于完成了。主要步骤如下: 1.加入第三方库 1.1.加入FMDBQueue 1.2.加入SDWebImage 2.数据库操作 2.1将数据库从资源文件拷贝到项目中 2.2数据库操作代码

水中加点糖 1万+

基于 Qt C++ 的 2D 动画制作工具

你可以修改它的中心坐标 (X, Y)、宽度 (W)、高度 (H),或点击 "选择颜色" 按钮改变其填充色。* **图形视图 (`QGraphicsView` 和 `QGraphicsScene`)**: 用于显示和编辑当前帧的内容。

寒寒豆豆软件公司的博客 116

IOS嵌入式数据库SQLite3使用简析 (转)

最近研究数据库,因为发现了很多好东西都来不及看,所以就先转载过来了,自己一定努力写一篇原创的。 转载自:http://hddev.blog.51cto.com/3365350/863169 1. Sqlite3数据类型及存储类 每个存放在sqlite数据库中(或者由这个数据库引擎操作)的值都有下面中的一个存储类: (1)NULL,值是NULL (2)IN...

weixin_33991727的博客 119

Unity零基础到入门 ☀️| 【UI系统学习】轻松学会 Unity 的 UGUI基础控件的使用(包括一个简易血条、蓝条设计)

Unity,UGUI。本篇博客来挑几种Unity中最常用的UI控件如何使用和使用技巧,包括一个简易血条蓝条的小实例

努力前行,总会成为自己心中的那道光 2万+

SXU—软件测试方法和技术-朱少民-第四部分 软件测试流程和规范-附考点

软件测试方法和技术-朱少民-第四章 软件测试流程和规范—这本书最后一部分的考点整理,考点分析

weixin_63597914的博客 1752

嵌入式sqlite3库的使用

1. **性能受限:** 对于大规模数据或高并发环境(高并发是指系统在同一时间内接收并处理大量的并发请求,对于数据库而言,高并发意味着大量的并发读写操作),SQLite 的性能可能不如其他专业的数据库系统。当然这些我们都可以不用特意的记,用到的时候可以搜索。说人话呢,就是你将数据存入数据库,就像你的钱存入银行,会更加的安全,高效,能够快速查询余额,也能够存储更久的时间。*到这里,我们通过命令操控终端去增,删,改,查数据库已经完成了,那我们怎么通过代码的方式去实现呢,话说贪多嚼不烂,我们下期再见。

freedom_paradise的博客 2265

IPGUARD客户端与应用程序冲突

客户端与应用程序冲突 症状 安装客户端之后,客户端的某些程序无法运行或使用过程中出现异常,卸载客户端后恢复正常。 原因分析 可能是客户端的某些功能与应用程序发生冲突导致。 解决方法 当出现这样的情况时,可以按照以下步骤确认。 步骤1:屏蔽主动注入 在客户端配置策略中,增加配置策略hookapi_disinj,值为1;待策略同步到客户端后,重启客户端确认问题是否解决。如果解决,则转到...

IP-Guard专栏 1411

IOS SQLite3的使用

一、什么是SQLIte      SQLite是一款轻型的嵌入式数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就足够了。它的处理速度比Mysql、PostgreSQL这两款著名的数据库都还快 二、数据库存储数据的步骤 1、新建一个数据库 2、新建一张表(table) 3、添加多个字段(column,列,属性) 4、添加多行记录(row,每行存放多个字段对应的值

爱家人,爱老婆,爱生活,爱coding,爱运动的有爱青年 2289

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

精雕软件(JDpaint) 5.5 绿色版

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

嵌入式数据库SQLite 3配置使用详细笔记教程

随着管理开发的项目体积越来越庞大,产品系统涉及的数据量也越来越多,并且伴随着项目不久就要交付给甲方了。如果项目的数据信息没有被妥善管理,后期设备的运行状态、操作状况等数据流信息不能被溯源,当出现了一些特殊意外时,就会导致对于故障信息不能迅速准确的追踪,甚至会被甩锅、推卸责任,白白当了冤大头。因此对于嵌入式项目中,其产品运行时的数据库建立非常有必要,且是迫在眉睫!!!目前常用的数据库系统有:MySQL、PostgreSQL、Oracle Database、Microsoft SQL Server、SQLit

weixin_49337111的博客 5607

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【iOS知识学习】_iOS下SQLite的使用

SQLite是嵌入式的和轻量级的sql数据库。广泛用于包括浏览器、ios、android以及一些便携需求的小型web应用系统。 SQLite是MySQL的精简版,无需服务器就能进行;限制条件:必须手动创建数据库,没有面向对象的接口; Demo做了个简单的保存学生信息的例子,点击保存按钮可以保存信息,点击查询可以查询信息,Demo下载地址:http://download.youkuaiyun.com/det

weasleyqi的专栏 2万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

IOS sqlite简单使用 以及为什么sqlite3_open无法创建数据库的原因

一、IOS数据存储方式 1.IOS中数据的存储方式有: 1)plist(NSArray、NSDictionary) 2)Preference(偏好设置,NSUserDefaulters) 3)NSCoding(NSKeyedArchiver) 4)sqlite3(数据库) 5)Core Data 2.其中归档、偏好设置还有plist存储都无法存储大量的数据。故大批量数据通常使

smilefish12345的博客 3513

Linux嵌入式系统SQlite3数据库学习笔记

一文掌握SQLite3数据口的使用方法

jcf5832的博客 1573

【iOS】数据持久化(三)之SQLite3数据库

本文介绍SQLite的使用 数据库(Database)是根据数据结构来组织、存储和管理数据的仓库数据库大致分为两种:关系型数据库(主流)、对象型数据库SQLite。 本文总结了在iOS开发中用OC语言如何去使用SQLite数据库,介绍了SQLite相关函数,以及SQLite的基本语句 iOS中原生的SQLite API在进行数据存储的时候,需要使用C语言中的函数,操作比较麻烦,于是就出现了一系列将SQLite封装的库:CoreData(Apple官方)、FMDB(第三方),后

XY_Mckevince的博客 2759

iOS Sqlite3 数据库的使用

这篇文章主要讲IOS 中Sqlite3数据库的简单介绍和基本的增删改插,目前已经有了FMDB等封装好的第三方,为什么还要学习sqlite3数据呢,个人觉得只有掌握了数据库的基本操作和语法才能更好的掌握和运用其他的第三方。SQLite? SQLit是一个开源、轻型嵌入式关系数据库,诞生于2000年5月 占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了 能够支持Windows/Linux/

梁成的博客 844
下一篇: [iPhoneSDK]CF Socket 简介
sinuo
博客等级 码龄15年 14粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值