ios 查询mysql数据库操作系统_iOS数据库FMDB--增删改查(模糊查询)详细介绍

简介:

很早就想整理一下数据库的使用了,刚好最近接触较多,加之可以安排出空余的时间,所以瓜子我贡献出自己喝咖啡的时间整理一下FMDB的使用,以下是对FMDB的介绍以及基本使用 --- insert、delete、update、select。其中select讲了两种比较重要的方式---ID查询、模糊查询。

在iOS中,主要有5种数据缓存的策略:

1、plist

2、归档

3、偏好设置

4、沙盒文件

5、"SQLite数据库"

其中,"SQLite数据库" 是最常用的数据缓存方式,在开发中,在无网络的状态下,数据库常常发挥着非常大的作用!

系统提供的数据存储方式的弊端 :

1)不方便操作大量的数据

- 系统提供的数据存储方式都是覆盖存储的,新的数据会覆盖旧的数据.而且当数据量非常大时,如果要添加新的数据,必须先把旧数据全部加载到内存中

2)不方便查找大量的数据

- 当数据量非常庞大时,要查询其中某些数据,就非常困难。

而数据库可以轻松解决以上弊端~

存储方式:(类比于Excel表格)

"Excel"                                           "SQLite"

- 创建Excel文件                   - 创建一个数据库文件

- 创建表                                - 创建表

- 确定表头                            - 创建数据库的字段名(Excel表头),并指定数据类型

- 对Excel表进行数据操作    - 对数据库进行增删改查

FMDB的使用流程:

简单介绍:FMDB 是一个操作数据库的第三方框架,并且支持多线程环境下的操作,也是需要手动导入'libsqlite3.0.tbd'库,以OC的方式封装了SQLite的C语言API。方便灵活并且线程安全。

"FMDatabase" : 单线程;"FMDatabaseQueue" : 多线程;"FMResultSet" : 查询的结果集。

1、创建数据库单例对象(一个数据库可以存在多个表)

2、创建数据库储存路径

3、创建表

4、对表格进行增删改查等操作

上代码:

1、创建数据库单例对象,如图1

1dd4e687f146

图 1

注意:创建单例的原因是保证数据库队列只创建一次,全局只有一个串行队列,这样操作数据更安全。

2、创建数据库路径和表格,如图 2

1dd4e687f146

1dd4e687f146

图 2

解析:单引号‘’中为表格的字段名,逗号后面为字段所属类型,字段类型是整形就用interger,字符串就用text。

注意:主键要想实现自动增长,不能是text类型。

我们看到,在沙盒中已经建好了表名为:JLcharacterModel 的数据库。如图3

1dd4e687f146

图 3

3、进行数据库操作 ---增删改查

提示:建表,增删改 操作都是方法 "[_db executeUpdate]"或者"[_db executeStatements]",查询是另外的方法 "[_db executeQuery]"  。星号(*)是选取所有列的快捷方式。SQL 语句对大小写不敏感。SELECT 等效于 select。

1 ) INSERT INTO

INSERT INTO 语句用于向表格中插入新的行。

语法:INSERT INTO 表名称 VALUES (值1, 值2,....)

也可以向指定的列插入数据:INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)

将数据写入表格,如图4(以下数据来源于卓浦士科技所属的app ---足球技能分析大师TropsX的云端数据,因为安全问题,将部分信息遮挡,敬请谅解)

1dd4e687f146

图 4

注意!请注意:

1)列名称和值名称的顺序要一一对应!例如:列名banner要对应自己的类型text。

2)如果列名类型是NSString,则需要加单引号 ‘’ 括住,例如:'%@',只应用于字符串类型。

3)对数据库进行操作增删改查之前要先打开数据库,操作完毕要关闭数据库。这只是一种严谨的写法,最好这样,否则可能会操作失败。

打开app本地数据库查看我们创建好的表格,如图 5

1dd4e687f146

图 5

这时候你会发现,表格是空的!!!!!what ?

仔细一看,原来是创建表格的表名称写错了!!把 CharaterModel 改为 JLCharaterModel ,so,数据库路径的表名称跟插入数据写的表名称一定要相同!运行程序。铛铛铛~

1dd4e687f146

图 6

注释:图 6 信息显示不全。

2)DELETE

DELETE 语句用于删除表中的行。

语法:DELETE FROM 表名称 WHERE 列名称 = 值,删除所有行:DELETE FROM 表名 或者DELETE * FROM 表名。

现在我们删除itemid为Shoe0101、Shoe0102这两行~ 代码如图 7。

1dd4e687f146

图 7

来看看数据库是否已经删除成功,如图8:铛铛铛~

1dd4e687f146

图 8

已经删除成功~

3)UPDATE

Update 语句用于修改表中的数据。

语法:更新某行的一列:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值。更新某行的若干列:UPDATE 表名称 SET 列名称1 = 新值1 ,列名称2 = 新值2 WHERE 列名称 = 某值。

将idNew为10000103的那一行 name改为静林是真的瓜子,status改为U,看代码:如图 9。

1dd4e687f146

图 9

图10 看看更新成功了没有?

1dd4e687f146

图 10

到这里就非常完美了~~

4)SELECT

SELECT 语句用于从表中选取数据。结果被存储在一个结果表中(称为结果集)。

语法:SELECT 列名称 FROM 表名称 或者 SELECT * FROM 表名称。

再次提示:星号(*)是选取所有列的快捷方式。SQL 语句对大小写不敏感。SELECT 等效于 select。

在讲update的时候已经写了一些select的语句了。通过条件查询,图 11看代码~

1dd4e687f146

图 11

注意:获取结果集列顺序的时候,一定要取对类型,比如banner类型是字符串就要用stringForColumnIndex,整形就要使用intForColumnIndex,长整型就要使用longForColumnIndex,类型取不对,会导致返回的结果不对,切记!

查询itemid为Shoe0103的结果,通过断点,我们可以知道返回了一个带有属性的model,如图12:

1dd4e687f146

图 12

通过关键字查询结果,如图13:

1dd4e687f146

1dd4e687f146

图 13

我们查询列名name有“瓜子”、expiredays == 90的结果,如图14:

1dd4e687f146

图 14

可以看到得出一个结果~~

大坑注意:

1)模糊查询时,需要自己拼接查询语句,不要使用框架提供的

2)'%' 是特殊字符,此时需要使用%转义.即 '%%'

3)自己拼接查询语句时,就需要自己添加单引号把字符串引起来

错误的拼接和执行模糊查询的方式:FMResultSet *resultSet = [_db executeQueryWithFormat:@"select * from t_heros where name like '%%%@%%'",keyWord];

正确的拼接和执行模糊查询的方式:NSString *selectSQL = [NSString stringWithFormat:@"select * from t_heros where name like '%%%@%%'",keyWord];

FMResultSet *resultSet = [_db executeQuery:selectSQL];

到这里就写完啦~希望对你有所帮助!不足之处敬请谅解并希望加以指正!QQ:1002282311 谢谢~~

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

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

相关文章

SQL Server 2008 R2如何生成带数据的数据库脚本

1.对想要复制的数据库右键,“任务”,“生成脚本” 2.下面需要注意的是,默认情况下,只会生成仅架构的脚本,也就是说仅仅有表结构,而没有数据的空壳。所以需要额外的设置。 在设置脚本编写选项,选…

java分页 jar_零基础学java之javaEE,分页

【分页】一 分页1.1分页概念引入什么是分页?分页(英语:Paging),是一种操作系统里存储器管理的一种技术,可以使电脑的主存可以使用存储在辅助存储器中的数据。操作系统会将辅助存储器(通常是磁盘)中的数据分区成固定大小的区块,称…

查看修改MySQL字符集

查看修改MySQL字符集 http://blog.sina.com.cn/s/blog_70ac6bec01016fts.html 查看修改MySQL字符集 (2012-08-22 09:53:21) 转载▼标签: 字符集 mysql数据库 mysql字符集查看 mysql启动命令 修改mysql字符集 分类: 网站开发MySQL字符集多种多样…

java在线找错_平台配置及测试错误提示及解决方案

平台配置错误提示及解决方案开发者在点击提交服务的时候可能会遇到以下各种各样的问题,本文列举出部分平台会弹出的提示,以便解决提交出现的问题。1、 请完成分发国家配置原因:未选择分发国家或未保存解决:在配置-发布国家中&…

resteasy_Tomcat 7上具有RESTeasy JAX-RS的RESTful Web服务– Eclipse和Maven项目

resteasy开发Web服务的RESTful方法不断受到越来越多的关注,并且似乎正在将SOAP淘汰。 我不会讨论哪种方法更好,但是我相信我们都同意REST更轻量级。 在本教程中,我将向您展示如何使用RESTeasy开发RESTful服务以及如何将它们部署在Tomcat服务器…

【Java心得总结六】Java容器中——Collection

在【Java心得总结五】Java容器上——容器初探这篇博文中,我对Java容器类库从一个整体的偏向于宏观的角度初步认识了Java容器类库。而在这篇博文中,我想着重对容器类库中的Collection容器做一个着重的探索与总结。 Collection:一个独立元素的序…

php 文章读取_php实现获取文章内容第一张图片的方法

本文实例讲述了php实现获取文章内容第一张图片的方法。分享给大家供大家参考。具体分析如下:采用php获取文章内容的第一张图片方法非常的简单,我们最常用的是使用正则了,感兴趣的朋友可以参考一下下面这段代码。以下是关于选取文章中第一张图…

昨天帮同学的学校写了首校歌

转载于:https://www.cnblogs.com/del/p/3792526.html

php做一个微信退款,PHP实现微信申请退款流程实例代码

前面讲了怎么实现微信支付,详见博文:php实现微信支付(jsapi支付)流程 和ThinkPHP中实现微信支付(jsapi支付)流程。由于业务需求,还需要有微信退款,经过研究和摸索,也终于搞定了。前期准备:当然是搞定了微信…

gwt格式_使用Spring Security保护GWT应用程序的安全

gwt格式在本教程中,我们将看到如何将GWT与Spring的安全模块(即Spring Security)集成。 我们将看到如何保护GWT入口点,如何检索用户的凭据以及如何记录各种身份验证事件。 此外,我们将实现自定义身份验证提供程序&#…

K-Means算法Demo

简介:本Demo是参照这个网站上的Demo自己用Java实现的。将Java打包为Jar,再将Jar转为exe,源代码及程序Demo下载请点我。 K-Means算法简介 我尽量用通俗易懂但不规范的语言来描述K-Means算法。 K-Means算法是数据挖掘十大算法之一,是…

php 时间周期,php 的生命周期

1、PHP的运行模式:PHP两种运行模式是WEB模式、CLI模式。无论哪种模式,PHP工作原理都是一样的,作为一种SAPI运行。1、当我们在终端敲入php这个命令的时候,它使用的是CLI。它就像一个web服务器一样来支持php完成这个请求&#xff0c…

struts2与struts1整合,java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

原因:我往项目的WEB-INF/lib中导入了struts2基本的包,还有struts1的core包,以及struts2-strut1-plugin的包,但是没有导入commons-loggin-1.3.1这个包,如下图 我打开commons-loggin-1.3.1这个包看了一下,果然…

debian 查看php版本,Debian 下轻松实现 PHP 多版本共存

PHP7 的发布废弃了部分特性,一些程序或者插件当前不能很好的运行在 PHP7 上,因此如果服务器上能同时运行多个 PHP 的版本,就可以很好的解决过渡期的兼容性问题。在前面两篇文章中,我们介绍了如何在 Debian Stretch 中安装使用 PHP…

apache lucene_全文搜索Apache Lucene简介

apache lucene在本教程中,我想谈谈Apache Lucene 。 Lucene是一个开源项目,提供基于Java的索引和搜索技术。 使用其API,很容易实现全文搜索 。 我将处理Lucene Java版本 ,但请记住,还有一个名为Lucene.NET的.NET端口&a…

经典ICP算法的问题

最近可能要用三维点云实现一个三维场景重建的功能,从经典的ICP算法开始,啃了一些文档,对其原理也是一知半解。 迭代最近点算法综述 大致参考了这份文档之后,照流程用MATLAB实现了一个简单的ICP算法,首先是发现这份文档…

iOS执行时工具-cycript

cycript是大神saurik开发的一个很强大的工具,能够让开发人员在命令行下和应用交互,在执行时查看和改动应用。它确实能够帮助你破解一些应用,但我认为这个工具主要还是用来学习其它应用的设计(主要是UI的设计及实现)。 …

java是如何实现原语的_Java中的低GC:使用原语而不是包装器

java是如何实现原语的总览 有两个很好的理由在可能的地方使用原语而不是包装器。 明晰。 通过使用原语,您可以清楚地知道null值是不合适的。 性能。 使用原语通常更快。 清晰度通常比性能更重要,并且是使用它们的最佳理由。 但是,本文讨论…

BrnShop开源网上商城第二讲:ASP.NET MVC框架

BrnShop开源网上商城第二讲:ASP.NET MVC框架 原文:BrnShop开源网上商城第二讲:ASP.NET MVC框架在团队设计BrnShop的web项目之初,我们碰到了两个问题,第一个是数据的复用和传递,第二个是大mvc框架和小mvc框架的选择。下…

tomcat不停机部署_Tomcat中的零停机部署(和回滚); 演练和清单

tomcat不停机部署亲爱的大家, 如果您认为Tomcat不能再进步,那您就错了。 Tomcat 7引入了所谓的并行部署 。 这是由SpringSource / VMWare贡献的。 简而言之,并行部署是指能够并行部署一个以上版本的Web应用程序,从而使所有版本都…