iOS使用sqlite3原生语法进行增删改查以及FMDB的使用

转载自:http://www.cnblogs.com/Steak/p/3802508.html

首先要导入libsqlite3.dylib并且加入头文件#import <sqlite3.h>,在进行增删改查之前还要先把数据库搞进去。

一种方法是从外面拷贝到程序里:http://www.cnblogs.com/Steak/p/3764395.html

另一种方法就是直接创建表,既然是操纵数据库,那么一定有一个数据库对象,sqlite是C库,所以需要一个C变量:

1 @interface DBHandler () {
2     sqlite3 *db;
3 }

在沙盒Documents文件夹里创建一个数据库文件,如果数据库不存在,sqlite3_open函数则会创建一个文件:

1     NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
2     NSString *dataBasePath = [[NSString alloc] initWithString:[documentPath stringByAppendingPathComponent:@"sqlite.sqlite"]];
3     int result = sqlite3_open([dataBasePath UTF8String], &db);

返回值是一个宏定义,如果成功则是SQLITE_OK,需要注意的是每次执行数据库操作的时候都需要open,完事之后都要调用对应的close。

对于打开和关闭的时机,有两种说法,一种是始终保持打开,另一种说法是随用随开关,个人比较倾向后者。

创建表:

1     char *sql = "create table if not exists for_persons (id integer primary key autoincrement, name text, age integer);";
2     char *error;
3     int result = sqlite3_exec(db, sql, NULL, NULL, &error);

增删改:

 1     char *sql = "insert into for_persons(name, age) values(?, ?)";
 2
 3     sqlite3_stmt *stmt;
 4     int result = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
 5     if (result == SQLITE_OK) {
 6         sqlite3_bind_text(stmt, 1, "xiaoming", -1, NULL);
 7         sqlite3_bind_int(stmt, 2, 10);
 8
 9         if (sqlite3_step(stmt)  == SQLITE_DONE) {
10             //成功
11         }
12         else {
13             //失败
14         }
15     }
16     else {
17         //语法检查失败
18     }
19
20     sqlite3_finalize(stmt);

这里以增加为例子,增删改都要定义一个sqlite3_stmt,并且在最后释放掉,然后通过sqlite3_prepare_v2对sql进行检查,检查成功后通过sqlite3_bind_XXX方法进行数据绑定,然后通过sqlite3_step执行sql语句。增删改的格式都是一样的。

查询数据:

 1     char *sql = "select * from for_persons";
 2     sqlite3_stmt *stmt;
 3     int result = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
 4     if (result == SQLITE_OK) {
 5         while (sqlite3_step(stmt) == SQLITE_ROW) {
 6             int ID = sqlite3_column_int(stmt, 0);
 7             char *name = (char *)sqlite3_column_text(stmt, 1);
 8             int age = sqlite3_column_int(stmt, 2);
 9
10             //到这里已经完整读出了一条记录
11             //如果有多条数据,可以在外面定义数组保存
12         }
13     }

查询也类似,需要使用while (sqlite3_step(stmt) == SQLITE_ROW)来判断如果还有下一条就取出来。

以上是原生sqlite3最基本的使用,但是这种C风格的代码看着就反胃,复制粘贴都没有胃口。

还好有人封装了一个很方便的第三方库叫FMDB。下面说说FMDB的使用,首先下载FMDB:https://github.com/ccgus/fmdb,同样导入libsqlite3.dylib,并且#import "FMDatabase.h"。

创建库文件并打开的代码很类似,不过都是OC代码,看起来舒服多了:

1 @interface DBHandler () {
2     FMDatabase *db;
3 }
1     NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
2     NSString *dataBasePath = [[NSString alloc] initWithString:[documentPath stringByAppendingPathComponent:@"sqlite.sqlite"]];
3     db = [FMDatabase databaseWithPath:dataBasePath];
4     [db open];

创建表:

1     NSString *sql = @"create table if not exists for_persons (id integer primary key autoincrement, name text, age integer);";
2     [db executeUpdate:sql];

代码一下子简单了,executeUpdate返回一个BOOL值。

增删改:

1     [db executeUpdate:@"insert into for_persons(name, age) values(?, ?)", @"xiaowang", @20];

同样都是使用executeUpdate方法,这里的问号相当于NSString当中的@,是个OC对象占位符。

执行查询也是OC风格的:

1     FMResultSet *rs = [db executeQuery:@"select name, age from for_persons where name = ?", @"xiaowang"];
2     while ([rs next]) {
3         NSString *name = [rs stringForColumn:@"Name"];
4         int age = [rs intForColumn:@"Age"];
5         NSLog(@"%@%d", name, age);
6     }
7     [rs close];

iOS使用sqlite3原生语法进行增删改查以及FMDB的使用,布布扣,bubuko.com

时间: 2024-12-26 06:37:47

iOS使用sqlite3原生语法进行增删改查以及FMDB的使用的相关文章

【iOS】sqlite3的使用(増删改查)

目录: 一.sqlite3常用函数 二.将sqlite3集成到项目,实现増删改查 三.封装DBManager 四.Demo 一.sqlite3常用函数及解释 (1)sqlite3_open: 用来创建和打开数据库文件,接收两个参数,第一个是数据库的名字,第二个是数据库的句柄.如果数据库文件不存在,将首先新建它,然后再打开它,否则只是打开它. (2)sqlite3_prepare_v2: 使用格式化的字符串来获得sql准备语句(prepared statement),然后转化为可被SQLite3识

iOS操作属性列表plist(增删改查)

摘要: iOS的存储方式之一--属性列表plist,还是经常见到的,可以很方便的用来管理一些有序的批量数据,特别是用来显示固定的内容到表单上时,不需要在代码中反复地繁琐编写数组,而可以在plist属性列表中进行可视化操作,极为便捷,本文讲解如何创建和使用plist列表,并显示在表单上. 达到下面的效果: 创建plist属性列表文件: 首先我们新建一个Single View的工程,这样就有可以直接使用的storyboard和ViewController文件,然后创建一个属性列表文件. 在Xcode

1MySQL语法基础--增删改查

建表语句 2 CREATE TABLE `students`('id'INT NOT NULL AUTO_INCREMENT,`name`VARCHAR(200)NOT NULL); 3 4 USE `school`; 5 6 CREATE TABLE `students`( 7 `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 8 `name` VARCHAR(20) NOT NULL, 9 `nickname` VARCHAR(20) NULL, 1

Android_ADB 常用 shell命令 和 sqlite3 简单增删改查

今天学习了一个ADB的常用命令.接下来简单使用几个常用ADB shell 命令. 首先我们得明白什么是adb.exe ADB -Android Debug Bridge, 是 Android sdk 里的一个工具,用这个工具可以直接操作管理 Android 模拟器或者真实的 Android 设备 简单来说,ADB 是一个[客户端(pc)-服务器端(android)]程序. 当然,重要的一点是,你的 Android 设备得打开 USB 调试 ADB 的主要功能有: 1.运行设备的 shell(命令

java使用原生MySQL实现数据的增删改查

一.工具类及配置文件准备工作 1.1 引入jar包 使用原生MySQL,只需要用到MySQL连接的jar包,maven引用方式如下: <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.48</version> </dependency> 1.2 jdbc.propert

iOS sqlite 增删改查 简单封装(基于 FMDB)

/** *  对 sqlite 的使用进行简单封装,仅涉及简单的单表 增删改查 * *  基于 FMDB * *  操作基于 model ,数据库表字段与 model 属性一一对应,对 model 整体进行操作 * *  根据 model 对象自动建表,字段类型只支持 NSString , NSIteger , float * *  用到 runtime 运行时获取 model 属性 * */ 1 // 2 // AGDatabaseManager.h 3 // 4 // Created by

学习Mysql第二天--增删改查

跬步何以至千里 今天主要学习增删改查,坚持每天学习一点 增删改查主要还是记住命令以及语法. 增删改查命令中都需要有表名 增 insert into 表名 value(); 删 delete from 表明 where from 参数 = “”; 改 update 表名 set 参数 = "" where owner = ""; 查 select * from 表名; 查看数据表的结构 (参数 类型等) desc 表名; mysql数据类型(引用菜鸟教程) MySQL

(原理篇)基于SQLite3轻量级封装,一行代码实现增删改查

最近写的项目中有用到数据库,写了不少蛋疼的sql语句,每次都是好几行代码,而且每次都是重复的没有一点技术含量的代码,虽然也有不少基于sqlite的封装,不过用起来还是感觉不够面向对象! 为了不再写重复的代码,花了几天时间,基于SQLite3简单封装了下,实现了一行代码解决增删改查等常用的功能!并没有太过高深的知识,主要用了runtime和KVC: 首先我们创建个大家都熟悉的Person类,并声明两个属性,下面将以类此展开分析 @interface Person : NSObject @prope

IOS开发中使用CNContact对通讯录增删改查

IOS开发中使用CNContact对通讯录增删改查 首先当然是把CNcontact包含在工程中: 1 @import Contacts; 1.下面是增加联系人的程序段: 1 CNMutableContact * contact = [[CNMutableContact alloc]init]; 2 contact.imageData = UIImagePNGRepresentation([UIImage imageNamed:@"22"]); 3 //设置名字 4 contact.gi