前几篇已经写完了SQLite与FMDB的基本内容以及衍生出来的知识点,我们这一篇主要讲述FMDB与SQLite在基本使用中的区别,大约需要5-10分钟时间讲述内容,欢迎大家指正。

基本使用区别

1.数据库的操作对象

(1)SQLite通过sqlite3

  1. sqlite3 *_db;

(2)FMDB方式

  1. FMDatabase *db;

2.打开数据库方式

(1)SQLite方式

  1. - (void)openDB{
  2. //获取数据库文件路径
  3. NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
  4. NSString *fileName = [doc stringByAppendingPathComponent:@"students.sqlite"];
  5.  
  6. //将OC字符串转换为c语言的字符串
  7. const char *cfileName = fileName.UTF8String;
  8.  
  9. //打开数据库文件(如果数据库文件不存在,那么该函数会自动创建数据库文件)
  10. int result = sqlite3_open(cfileName, &_db);
  11. if (result == SQLITE_OK) {//打开成功
  12. NSLog(@"成功打开数据库");
  13. }else{
  14. NSLog(@"打开数据库失败");
  15. }
  16. }

(2)FMDB方式

  1. - (void)openDB{
  2. //1、获取数据库文件路径
  3. NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
  4. NSString *fileName = [doc stringByAppendingPathComponent:@"students.sqlite"];
  5.  
  6. //2、获取数据库连接
  7. _db = [FMDatabase databaseWithPath:fileName];
  8.  
  9. //3、打开数据库连接
  10. if ([_db open]) {
  11. NSLog(@"打开数据库成功");
  12. }else{
  13. NSLog(@"打开数据库失败");
  14. }
  15.  
  16. }

3.创建表格

(1)SQLite方式

  1. - (void)createTable{
  2. //创建表
  3. const char *sql = "CREATE TABLE IF NOT EXISTS t_student(id integer PRIMARY KEY AUTOINCREMENT,name text NOT NULL,age integer NOT NULL);";
  4. char *errmsg= NULL;
  5. int result = sqlite3_exec(_db, sql, NULL, NULL, &errmsg);
  6. if (result==SQLITE_OK) {
  7. NSLog(@"创建表成功");
  8. }else{
  9. NSLog(@"创建表失败---%s",errmsg);
  10. }
  11. }

(2)FMDB方式

  1. - (void)createTable{
  2. BOOL result = [_db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"];
  3. if (result) {
  4. NSLog(@"创建表格成功");
  5. }else{
  6. NSLog(@"创建表格失败");
  7. }
  8. }

4.插入数据

(1)SQLite方式

  1. - (void)insertData{
  2. //插入数据
  3. for (int i=; i<; i++) {
  4. //拼接sql语句
  5. NSString *name = [NSString stringWithFormat:@"yixiangboy--%d",arc4random_uniform()];
  6. int age = arc4random_uniform()+;
  7. NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_student (name,age) VALUES ('%@',%d);",name,age];
  8.  
  9. //执行SQL语句
  10. char *errmsg = NULL;
  11. sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg);
  12. if (errmsg) {//如果有错误信息
  13. NSLog(@"插入数据失败--%s",errmsg);
  14. }else{
  15. NSLog(@"插入数据成功");
  16. }
  17. }
  18. }

(2)FMDB方式

  1. - (void)insertData{
  2. for (int i=; i<; i++) {
  3. NSString *name = [NSString stringWithFormat:@"yixiang-%d",arc4random_uniform()];
  4. int age = arc4random_uniform()+;
  5. BOOL result = [_db executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);",name, @(age)];
  6. if (result) {
  7. NSLog(@"插入成功");
  8. }else{
  9. NSLog(@"插入失败");
  10. }
  11. }
  12. }

5.删除数据

(1)SQLite方式

  1. - (void)deleteData{
  2. //删除age小于15的数据
  3. NSString *sql = [NSString stringWithFormat:@"DELETE FROM t_student WHERE age<15"];
  4. char *errmsg = NULL;
  5. sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg);
  6. if (errmsg) {
  7. NSLog(@"删除数据失败");
  8. }else{
  9. NSLog(@"删除数据成功");
  10. }
  11. }

(2)FMDB方式

  1. - (void)deleteData{
  2. BOOL result = [_db executeUpdate:@"DELETE FROM t_student WHERE age<15"];
  3. if (result) {
  4. NSLog(@"删除成功");
  5. }else{
  6. NSLog(@"删除失败");
  7. }
  8. }

6.更新数据

(1)SQLite方式

  1. - (void)updateData{
  2. //大于20岁的都置为20岁
  3. NSString *sql = [NSString stringWithFormat:@"UPDATE t_student set age=20 WHERE age>20"];
  4. char *errmsg = NULL;
  5. sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg);
  6. if (errmsg) {
  7. NSLog(@"更新数据失败");
  8. }else{
  9. NSLog(@"更新数据成功");
  10. }
  11. }

(2)FMDB方式

  1. - (void)updateData{
  2. BOOL result = [_db executeUpdate:@"UPDATE t_student set age=20 WHERE age>20"];
  3. if (result) {
  4. NSLog(@"更新成功");
  5. }else{
  6. NSLog(@"更新失败");
  7. }
  8. }

7.查询数据

(1)SQLite方式

  1. - (void)queryData{
  2. const char *sql = "SELECT id,name,age FROM t_student WHERE age<20";
  3. sqlite3_stmt *stmt = NULL;
  4.  
  5. //进行查询前的准备工作
  6. if(sqlite3_prepare_v2(_db, sql, -, &stmt, NULL)==SQLITE_OK){//SQL语句没有问题
  7. NSLog(@"查询语句没有问题");
  8.  
  9. //每调用一次sqlite3_step函数,stmt就会指向下一条记录
  10. while (sqlite3_step(stmt)==SQLITE_ROW) {//找到一条记录
  11. //取出数据
  12. //(1)取出第0个字段的值(int)
  13. int ID=sqlite3_column_int(stmt, );
  14. //(2)取出第一列字段的值(text)
  15. const unsigned char *name = sqlite3_column_text(stmt, );
  16. //(3)取出第二列字段的值(int)
  17. int age = sqlite3_column_int(stmt, );
  18.  
  19. printf("%d %s %d\n",ID,name,age);
  20. }
  21. }else{
  22. NSLog(@"查询语句有问题");
  23. }
  24. }

(2)FMDB方式

  1. - (void)queryData{
  2. FMResultSet *resultSet = [_db executeQuery:@"SELECT * FROM t_student WHERE age > ?",@()];
  3.  
  4. while ([resultSet next]) {
  5. int ID = [resultSet intForColumn:@"id"];
  6. NSString *name = [resultSet stringForColumn:@"name"];
  7. int age = [resultSet intForColumn:@"age"];
  8. NSLog(@"%d %@ %d",ID,name,age);
  9. }
  10. }

以上就是SQLite在基本使用上与FMDB的区别,内容比较简短,但还是比较清晰的,希望对大家有所帮助,下一篇将讲述苹果官方自带的CoreData数据库。

SQLite与FMDB使用中区别的更多相关文章

  1. 我为什么用 SQLite 和 FMDB 而不用 Core Data

    凭良心讲,我不能告诉你不去使用Core Data.它不错,而且也在变好,并且它被很多其他Cocoa开发者所理解,当有新人加入你的组或者需要别人接手你的项目的时候,这点很重要.更重要的是,不值得花时间和 ...

  2. 谈谈用SQLite和FMDB而不用Core Data

    谈谈用SQLite和FMDB而不用Core Data 发布于:2014-04-22 11:22阅读数:4235 凭良心讲,我不能告诉你不去使用Core Data.它不错,而且也在变好,并且它被很多其他 ...

  3. 用 SQLite 和 FMDB 替代 Core Data

    本文转载至 http://blog.csdn.net/majiakun1/article/details/38680147 为什么我不使用Core Data Mike Ash 写到: 就个人而言,我不 ...

  4. mysql 和 sqlite 区别 及 SQLite Expert Professional sqliteManager 区别

    mysql 和 sqlite 区别 SQLITE是单机数据库.功能简约,小型化,追求最大磁盘效率MYSQL是完善的服务器数据库.功能全面,综合化,追求最大并发效率 MYSQL.Sybase.Oracl ...

  5. iOS之Sqlite和FMDB

    在iOS 开发中,总会用到数据库的操作,来实现增.删.改.查. 尤其是查询. 一旦涉及到查询的操作,那就非得用数据库不可了.   SQLite (http://www.sqlite.org/docs. ...

  6. 【iOS】使用SQLite与FMDB

    iOS中的SQLite与Android中的一模一样,仅仅是调用方法有差异.假设单从调用来讲,Android封装的一套helper更好用一些,而iOS原生的用C语言的几个函数在操作,比較麻烦.只是引入第 ...

  7. iOS数据持久化之数据库:SQLite和FMDB

    SQLite: SQLite是一款轻量级型的数据库,资源占用少.性能良好和零管理成本,具有零配置(无需安装和管理配置).独立(没有额外依赖).储存在单一磁盘文件中的一个完整的数据库.源码完全的开源.比 ...

  8. Sqlite和CoreData的区别

    使用方便性.实际上,一个成熟的工程中一定是对数据持久化进行了封装的,因此底层使用的到底是core data还是sqlite,不应该被业务逻辑开发者关心.因此,即使习惯写SQL查询的人,也应该避免在业务 ...

  9. Sqlite和mysql的区别及优缺点

    小型嵌入式,跟mysql差不多,但更小,功能也少,属于本地数据库多用于读多写少,100W以下的数据压力不大,不支持分布式.   真正开源的小型嵌入式数据库,支持事务.触发器器  性能至少优于mysql ...

随机推荐

  1. 【洛谷P3369】【模板】普通平衡树题解

    [洛谷P3369][模板]普通平衡树题解 题目链接 题意: 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3 ...

  2. curl安装和使用

    curl可以看作命令行浏览器 1.开启gzip请求 # curl -I http://www.sina.com.cn/ -H Accept-Encoding:gzip,defalte 2.监控网页的响 ...

  3. 运维工具pssh和pdsh安装和使用

    1. pssh安装与使用 1.1 pssh安装 [root@server]# wget http://peak.telecommunity.com/dist/ez_setup.py [root@ser ...

  4. 使用jquery实现文本框输入特效:文字逐个显示逐个消失反复循环

    前两天看到某个网站上的输入框有个小特效:文字逐个显示,并且到字符串最大长度后,逐个消失,然后重新循环显示消失,循环显示字符串数组.我对这个小特效有点好奇,于是今天自己尝试用jquery写一个简单的小d ...

  5. Windows 10 IoT Core 17127 for Insider 版本更新

    昨天,微软发布了Windows 10 IoT Core 17127 for Insider 版本更新,本次更新只修正了一些Bug,没有发布新的特性.相比于17120,修复了一个已知的问题. 一些已知的 ...

  6. IDEA环境下GIT操作浅析之一Idea下仓库初始化与文件提交涉及到的基本命令

    目标总括 idea 下通过命令操作文件提交,删除,与更新并推送到github 开源库基本操作idea 下通过命令实现分支的创建与合并操作 idea 下通过图形化方式实现idea 项目版本控制基本操作 ...

  7. 吴恩达机器学习笔记47-K均值算法的优化目标、随机初始化与聚类数量的选择(Optimization Objective & Random Initialization & Choosing the Number of Clusters of K-Means Algorithm)

    一.K均值算法的优化目标 K-均值最小化问题,是要最小化所有的数据点与其所关联的聚类中心点之间的距离之和,因此 K-均值的代价函数(又称畸变函数 Distortion function)为: 其中

  8. Kali学习笔记13:操作系统识别

    为什么要扫描操作系统呢? 其实和上一篇博客:<服务扫描>类似,都是为了能够发现漏洞 发现什么漏洞? 不同的操作系统.相同操作系统不同版本,都存在着一些可以利用的漏洞 而且,不同的系统会默认 ...

  9. SpringCache实战遇坑

    1. SpringCache实战遇坑 1.1. pom 主要是以下两个 <dependency> <groupId>org.springframework.boot</g ...

  10. ubuntu 16.04 安装matlab的替代工具Octave及使用指南

    为什么要安装Octave? 它是什么? GNU Octave是自由软件基金会(Free Software Foundation)支持的遵循GPL协议(GNU General Public Licens ...