前言  

  SQL是一种数据库查询语言,用于存取数据以及查询、更新和管理关系数据库系统,因为强大的查询功能和简单的语法,已经成为主流数据库的标准语言。SQLite3是一种嵌入式的数据库,无需服务器支持,它将SQL语句嵌入到一般通用编程语言程序中去,SQL语句负责对数据库中数据的提取及操作,它所提取的数据将逐行提交给程序,程序中其他语句负责数据的处理。Sqlite3的程序接口是基于C语言的,它在存储和检索大量数据上非常有效,而且能够聚合复杂的数据,更快地处理数据获取结果。与使用对象处理数据相比,最大的优点就是不必把所有的对象加载到内存中,而只是提取符合特定条件的对象。

  在项目中使用SQLite3的开发流程

  1.设计生产数据库

  第一步、下载安装SQLite Manager工具:首先打开火狐浏览器,在工具下面选择“附加组件”,在浏览器右上角的搜索框中输入“SQLite”,然后选择并安装SQLite Manager。

  第二步、安装完成后会提示是否重新启动浏览器,重新启动后,再次点击工具会看到SQLite Manager已经出现在选项中。打开它可以看到下图数据库工具界面,到这里我们就完成了下载安装SQLite Manager工具的操作。

  第三步、创建SQLite3数据库:首先,在SQLite Manager中,选择空白新建图标,新建一个数据库,输入定义的数据库名NoteSQL.sqlite。

  第四步、然后,点击Create Table图标,创建一个新的表并命名为NoteSQL。编辑表中的内容。最后就完成了数据库的创建工作。

  2.创建项目并把数据库文件导入到项目中

  第一步、将刚才创建的数据库加到你的项目工程目录下。

  第二步、点击工程名-》TARGETS-》Build Phases,选择Link Binary With Libraires,加入libsqlite3.tbd文件。

  

  3.用数据库写入和读取数据

第一步、进行数据库的复制操作,将我们加入工程的数据库,复制一份到我们的应用程序的Documents文件目录下

//数据库的复制操作
- (void)createDatabaseIfNeeded:(NSString *)filename{
BOOL success;
NSFileManager * fileManager = [NSFileManager defaultManager];
NSError * error;
NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * documentsDirectory = [paths objectAtIndex:0];
NSString * writableDBPath = [documentsDirectory stringByAppendingPathComponent:filename];
NSLog(@"%@",writableDBPath);
success = [fileManager fileExistsAtPath:writableDBPath];
if (success) {
return;
}
NSString * defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:filename];
success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
if (!success) {
NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
}
}

第二步、打开数据库

//打开数据库
- (void)openDB{
NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * documenthPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"NoteSQL.sqlite"];
int returnValue = sqlite3_open([documenthPath UTF8String], &database);
if (returnValue != SQLITE_OK) {
sqlite3_close(database);
NSAssert1(0, @"Failed to open database with message '%s'.", sqlite3_errmsg(database));
}
}

第三步、打开数据库插入数据

if (sqlite3_open([[self dataFilePath] UTF8String], &_database) != SQLITE_OK) {
sqlite3_close(_database);
NSAssert(0, @"Failed to open database");
}
//插入操作
NSString * insertSQL = [[NSString alloc] initWithFormat:@"insert into NoteSQL(title, date, types, content) values('%@','%@','%@','%@')",titleStr, dateStr, typesStr, contentStr];
char * errorMsg2;
if (sqlite3_exec(_database, [insertSQL UTF8String], NULL, NULL, &errorMsg2) != SQLITE_OK) {
NSAssert1(0, @"Error updating tables:%s", errorMsg2);
sqlite3_free(errorMsg2);
}
sqlite3_close(_database);

第四步、打开数据库并从中读取数据

if (sqlite3_open([[self dataFilePath] UTF8String], &database) != SQLITE_OK) {
sqlite3_close(database);
NSAssert(0, @"Failed to open database");
}
NSString * query = @"select * from NoteSQL order by date";
sqlite3_stmt * statement;
if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil) == SQLITE_OK) {
while (sqlite3_step(statement) == SQLITE_ROW) {
char * titleChar = (char *)sqlite3_column_text(statement, 0);
char * dateChar = (char *)sqlite3_column_text(statement, 1);
char * typesChar = (char *)sqlite3_column_text(statement, 2);
char * contentChar = (char *)sqlite3_column_text(statement, 3); //C 字符串转换成NSString
NSString * title = [[NSString alloc] initWithUTF8String:titleChar];
NSString * date = [[NSString alloc] initWithUTF8String:dateChar];
NSString * types = [[NSString alloc] initWithUTF8String:typesChar]; NSString * content = [[NSString alloc] initWithUTF8String:contentChar]; recordInfo * record = [[recordInfo alloc] init];
record.title = [title copy];
record.types = [types copy];
record.date = [date copy];
record.content = [content copy];
[mutArray addObject:record];
}
sqlite3_finalize(statement);
}

使用SQLite3持久保存应用程序数据的更多相关文章

  1. Docker最全教程——数据库容器化之持久保存数据(十一)

    上一节我们讲述了SQL Server容器化实践(注意,SQL Server现在也支持跨平台),本节将讲述如何持久保存数据,并且接下来将逐步讲解其他数据库(MySql.Redis.Mongodb等等)的 ...

  2. C# 如何使用配置文件保存应用程序里的配置数据

    引言 我不知大家早先是如何保存应用程序配置,以备下次打开时使用的,反正我开始学.Net的时候就去研究序列化,以二进制或XML格式的序列化来保存应用程序配置.这样每次都要建立单独的配置类,并书写读写配置 ...

  3. [MISS静IOS开发原创文摘]-AppDelegate存储全局变量和 NSUserDefaults standardUserDefaults 通过模型保存和读取数据,存储自定义的对象

    由于app开发的需求,需要从api接口获得json格式数据并保存临时的 app的主题颜色 和 相关url 方案有很多种: 1, 通过AppDelegate保存为全局变量,再获取 2,使用NSUSerD ...

  4. 【转】基本数据持久性(一) 使用plist保存和读取数据

    原文网址:http://www.it165.net/pro/html/201309/7170.html 想保存成绩.记录得分.保存账号密码等等?数据持久性可以做到这一点!这篇文章通过简单的程序,来分享 ...

  5. 微信小程序数据请求方法wx.request小测试

    微信小程序数据请求方法 wx.request wxml文件: <view> <textarea value="{{textdata}}"/> </vi ...

  6. TensorFlow从1到2(四)时尚单品识别和保存、恢复训练数据

    Fashion Mnist --- 一个图片识别的延伸案例 在TensorFlow官方新的教程中,第一个例子使用了由MNIST延伸而来的新程序. 这个程序使用一组时尚单品的图片对模型进行训练,比如T恤 ...

  7. @1-5使用pandas保存豆瓣短评数据

    使用pandas保存豆瓣短评数据 Python爬虫(入门+进阶)     DC学院 本节课程的内容是介绍open函数和pandas两种保存已爬取的数据的方法,并通过实际例子使用pandas保存数据. ...

  8. php实现input输入框失去焦点自动保存输入框的数据

    最近做一个输入框失去焦点时自动保存数据的功能,当然就是jQuery选择器选择input,blur时,ajax提交数据给php文件,php文件保存一下数据咯.主要是要注意一下中文的问题,所以中间需要转一 ...

  9. [android]-如何在向服务器发送request时附加已保存的cookie数据

    [android]-如何在向服务器发送request时附加已保存的cookie数据 应用场景:在开发android基于手机端+服务器端的应用时,登陆->获取用户信息->获取授权用户相关业务 ...

随机推荐

  1. SAP MRP的计算步骤

          SAP MRP的计算步骤,物料需求计划(简称为MRP)与主生产计划一样属于ERP计划管理体系,它主要解决企业生产中的物料需求与供给之间的关系,即无论是对独立需求的物料,还是相关需求的物料, ...

  2. Objective-C的对象模型和runtime机制

    内容列表 对象模型(结构定义,类对象.元类和实例对象的关系) 消息传递和转发机制 runtime系统功能理解 对象模型 结构定义 对象(Object): OC中基本构造单元 (building blo ...

  3. 深入剖析 HTML5

    作为新一代的 HTML 标准,HTML5 不仅强化了 Web 网页的表现性能,还追加了本地数据库等 Web 应用的功能.虽然 HTML5 标准仍处于完善之中.然而,大部分新版本的浏览器已经能够支持某些 ...

  4. [Angular 2] Order Dynamic Components Inside an Angular 2 ViewContainer

    By default, when you generate components, they will simply be added to the page in order, one after ...

  5. jQuery.validate的this.optional(element)作用

    今天使用同事扩展jquery validate函数mobile验证时,require值传入false发现也会验证, 去掉mobile后就没这个问题,把mobile替换成自带的digits也没有这个问题 ...

  6. mysql 升级方法

    Performing an In-place Upgrade This section describes how to perform an in-place upgrade. Review Bef ...

  7. LinkedHashMap介绍

    转载:http://uule.iteye.com/blog/1522291 jdk1.7API文档链接:http://tool.oschina.net/apidocs/apidoc?api=jdk_7 ...

  8. vsftpd虚拟用户创建实例(转载)

    vsftpd虚拟用户创建实例 发布:theboy   来源:net     [大 中 小] vsftpd虚拟用户创建实例,有需要的朋友可以参考下.  vsftpd虚拟用户创建实例,有需要的朋友可以参考 ...

  9. 给学习IT、编程者的看

    Preface: 我始终认为,对一个初学者来说,IT界的技术风潮...... Content: 我始终认为,对一个初学者来说,IT界的技术风潮是不可以追赶的,而且也没有能力去追赶.我时常看见自己的DD ...

  10. 1.4.2 solr字段类型--(1.4.2.7)字段属性使用案例

    1.4.2 solr字段类型 (1.4.2.1) 字段类型定义和字段类型属性. (1.4.2.2) solr附带的字段类型 (1.4.2.3) 使用货币和汇率 (1.4.2.4) 使用Dates(日期 ...