SQLite与FMDB使用中区别
前几篇已经写完了SQLite与FMDB的基本内容以及衍生出来的知识点,我们这一篇主要讲述FMDB与SQLite在基本使用中的区别,大约需要5-10分钟时间讲述内容,欢迎大家指正。
基本使用区别
1.数据库的操作对象
(1)SQLite通过sqlite3
- sqlite3 *_db;
(2)FMDB方式
- FMDatabase *db;
2.打开数据库方式
(1)SQLite方式
- - (void)openDB{
- //获取数据库文件路径
- NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
- NSString *fileName = [doc stringByAppendingPathComponent:@"students.sqlite"];
- //将OC字符串转换为c语言的字符串
- const char *cfileName = fileName.UTF8String;
- //打开数据库文件(如果数据库文件不存在,那么该函数会自动创建数据库文件)
- int result = sqlite3_open(cfileName, &_db);
- if (result == SQLITE_OK) {//打开成功
- NSLog(@"成功打开数据库");
- }else{
- NSLog(@"打开数据库失败");
- }
- }
(2)FMDB方式
- - (void)openDB{
- //1、获取数据库文件路径
- NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
- NSString *fileName = [doc stringByAppendingPathComponent:@"students.sqlite"];
- //2、获取数据库连接
- _db = [FMDatabase databaseWithPath:fileName];
- //3、打开数据库连接
- if ([_db open]) {
- NSLog(@"打开数据库成功");
- }else{
- NSLog(@"打开数据库失败");
- }
- }
3.创建表格
(1)SQLite方式
- - (void)createTable{
- //创建表
- const char *sql = "CREATE TABLE IF NOT EXISTS t_student(id integer PRIMARY KEY AUTOINCREMENT,name text NOT NULL,age integer NOT NULL);";
- char *errmsg= NULL;
- int result = sqlite3_exec(_db, sql, NULL, NULL, &errmsg);
- if (result==SQLITE_OK) {
- NSLog(@"创建表成功");
- }else{
- NSLog(@"创建表失败---%s",errmsg);
- }
- }
(2)FMDB方式
- - (void)createTable{
- BOOL result = [_db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"];
- if (result) {
- NSLog(@"创建表格成功");
- }else{
- NSLog(@"创建表格失败");
- }
- }
4.插入数据
(1)SQLite方式
- - (void)insertData{
- //插入数据
- for (int i=; i<; i++) {
- //拼接sql语句
- NSString *name = [NSString stringWithFormat:@"yixiangboy--%d",arc4random_uniform()];
- int age = arc4random_uniform()+;
- NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_student (name,age) VALUES ('%@',%d);",name,age];
- //执行SQL语句
- char *errmsg = NULL;
- sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg);
- if (errmsg) {//如果有错误信息
- NSLog(@"插入数据失败--%s",errmsg);
- }else{
- NSLog(@"插入数据成功");
- }
- }
- }
(2)FMDB方式
- - (void)insertData{
- for (int i=; i<; i++) {
- NSString *name = [NSString stringWithFormat:@"yixiang-%d",arc4random_uniform()];
- int age = arc4random_uniform()+;
- BOOL result = [_db executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);",name, @(age)];
- if (result) {
- NSLog(@"插入成功");
- }else{
- NSLog(@"插入失败");
- }
- }
- }
5.删除数据
(1)SQLite方式
- - (void)deleteData{
- //删除age小于15的数据
- NSString *sql = [NSString stringWithFormat:@"DELETE FROM t_student WHERE age<15"];
- char *errmsg = NULL;
- sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg);
- if (errmsg) {
- NSLog(@"删除数据失败");
- }else{
- NSLog(@"删除数据成功");
- }
- }
(2)FMDB方式
- - (void)deleteData{
- BOOL result = [_db executeUpdate:@"DELETE FROM t_student WHERE age<15"];
- if (result) {
- NSLog(@"删除成功");
- }else{
- NSLog(@"删除失败");
- }
- }
6.更新数据
(1)SQLite方式
- - (void)updateData{
- //大于20岁的都置为20岁
- NSString *sql = [NSString stringWithFormat:@"UPDATE t_student set age=20 WHERE age>20"];
- char *errmsg = NULL;
- sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg);
- if (errmsg) {
- NSLog(@"更新数据失败");
- }else{
- NSLog(@"更新数据成功");
- }
- }
(2)FMDB方式
- - (void)updateData{
- BOOL result = [_db executeUpdate:@"UPDATE t_student set age=20 WHERE age>20"];
- if (result) {
- NSLog(@"更新成功");
- }else{
- NSLog(@"更新失败");
- }
- }
7.查询数据
(1)SQLite方式
- - (void)queryData{
- const char *sql = "SELECT id,name,age FROM t_student WHERE age<20";
- sqlite3_stmt *stmt = NULL;
- //进行查询前的准备工作
- if(sqlite3_prepare_v2(_db, sql, -, &stmt, NULL)==SQLITE_OK){//SQL语句没有问题
- NSLog(@"查询语句没有问题");
- //每调用一次sqlite3_step函数,stmt就会指向下一条记录
- while (sqlite3_step(stmt)==SQLITE_ROW) {//找到一条记录
- //取出数据
- //(1)取出第0个字段的值(int)
- int ID=sqlite3_column_int(stmt, );
- //(2)取出第一列字段的值(text)
- const unsigned char *name = sqlite3_column_text(stmt, );
- //(3)取出第二列字段的值(int)
- int age = sqlite3_column_int(stmt, );
- printf("%d %s %d\n",ID,name,age);
- }
- }else{
- NSLog(@"查询语句有问题");
- }
- }
(2)FMDB方式
- - (void)queryData{
- FMResultSet *resultSet = [_db executeQuery:@"SELECT * FROM t_student WHERE age > ?",@()];
- while ([resultSet next]) {
- int ID = [resultSet intForColumn:@"id"];
- NSString *name = [resultSet stringForColumn:@"name"];
- int age = [resultSet intForColumn:@"age"];
- NSLog(@"%d %@ %d",ID,name,age);
- }
- }
以上就是SQLite在基本使用上与FMDB的区别,内容比较简短,但还是比较清晰的,希望对大家有所帮助,下一篇将讲述苹果官方自带的CoreData数据库。
SQLite与FMDB使用中区别的更多相关文章
- 我为什么用 SQLite 和 FMDB 而不用 Core Data
凭良心讲,我不能告诉你不去使用Core Data.它不错,而且也在变好,并且它被很多其他Cocoa开发者所理解,当有新人加入你的组或者需要别人接手你的项目的时候,这点很重要.更重要的是,不值得花时间和 ...
- 谈谈用SQLite和FMDB而不用Core Data
谈谈用SQLite和FMDB而不用Core Data 发布于:2014-04-22 11:22阅读数:4235 凭良心讲,我不能告诉你不去使用Core Data.它不错,而且也在变好,并且它被很多其他 ...
- 用 SQLite 和 FMDB 替代 Core Data
本文转载至 http://blog.csdn.net/majiakun1/article/details/38680147 为什么我不使用Core Data Mike Ash 写到: 就个人而言,我不 ...
- mysql 和 sqlite 区别 及 SQLite Expert Professional sqliteManager 区别
mysql 和 sqlite 区别 SQLITE是单机数据库.功能简约,小型化,追求最大磁盘效率MYSQL是完善的服务器数据库.功能全面,综合化,追求最大并发效率 MYSQL.Sybase.Oracl ...
- iOS之Sqlite和FMDB
在iOS 开发中,总会用到数据库的操作,来实现增.删.改.查. 尤其是查询. 一旦涉及到查询的操作,那就非得用数据库不可了. SQLite (http://www.sqlite.org/docs. ...
- 【iOS】使用SQLite与FMDB
iOS中的SQLite与Android中的一模一样,仅仅是调用方法有差异.假设单从调用来讲,Android封装的一套helper更好用一些,而iOS原生的用C语言的几个函数在操作,比較麻烦.只是引入第 ...
- iOS数据持久化之数据库:SQLite和FMDB
SQLite: SQLite是一款轻量级型的数据库,资源占用少.性能良好和零管理成本,具有零配置(无需安装和管理配置).独立(没有额外依赖).储存在单一磁盘文件中的一个完整的数据库.源码完全的开源.比 ...
- Sqlite和CoreData的区别
使用方便性.实际上,一个成熟的工程中一定是对数据持久化进行了封装的,因此底层使用的到底是core data还是sqlite,不应该被业务逻辑开发者关心.因此,即使习惯写SQL查询的人,也应该避免在业务 ...
- Sqlite和mysql的区别及优缺点
小型嵌入式,跟mysql差不多,但更小,功能也少,属于本地数据库多用于读多写少,100W以下的数据压力不大,不支持分布式. 真正开源的小型嵌入式数据库,支持事务.触发器器 性能至少优于mysql ...
随机推荐
- 【洛谷P3369】【模板】普通平衡树题解
[洛谷P3369][模板]普通平衡树题解 题目链接 题意: 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3 ...
- curl安装和使用
curl可以看作命令行浏览器 1.开启gzip请求 # curl -I http://www.sina.com.cn/ -H Accept-Encoding:gzip,defalte 2.监控网页的响 ...
- 运维工具pssh和pdsh安装和使用
1. pssh安装与使用 1.1 pssh安装 [root@server]# wget http://peak.telecommunity.com/dist/ez_setup.py [root@ser ...
- 使用jquery实现文本框输入特效:文字逐个显示逐个消失反复循环
前两天看到某个网站上的输入框有个小特效:文字逐个显示,并且到字符串最大长度后,逐个消失,然后重新循环显示消失,循环显示字符串数组.我对这个小特效有点好奇,于是今天自己尝试用jquery写一个简单的小d ...
- Windows 10 IoT Core 17127 for Insider 版本更新
昨天,微软发布了Windows 10 IoT Core 17127 for Insider 版本更新,本次更新只修正了一些Bug,没有发布新的特性.相比于17120,修复了一个已知的问题. 一些已知的 ...
- IDEA环境下GIT操作浅析之一Idea下仓库初始化与文件提交涉及到的基本命令
目标总括 idea 下通过命令操作文件提交,删除,与更新并推送到github 开源库基本操作idea 下通过命令实现分支的创建与合并操作 idea 下通过图形化方式实现idea 项目版本控制基本操作 ...
- 吴恩达机器学习笔记47-K均值算法的优化目标、随机初始化与聚类数量的选择(Optimization Objective & Random Initialization & Choosing the Number of Clusters of K-Means Algorithm)
一.K均值算法的优化目标 K-均值最小化问题,是要最小化所有的数据点与其所关联的聚类中心点之间的距离之和,因此 K-均值的代价函数(又称畸变函数 Distortion function)为: 其中
- Kali学习笔记13:操作系统识别
为什么要扫描操作系统呢? 其实和上一篇博客:<服务扫描>类似,都是为了能够发现漏洞 发现什么漏洞? 不同的操作系统.相同操作系统不同版本,都存在着一些可以利用的漏洞 而且,不同的系统会默认 ...
- SpringCache实战遇坑
1. SpringCache实战遇坑 1.1. pom 主要是以下两个 <dependency> <groupId>org.springframework.boot</g ...
- ubuntu 16.04 安装matlab的替代工具Octave及使用指南
为什么要安装Octave? 它是什么? GNU Octave是自由软件基金会(Free Software Foundation)支持的遵循GPL协议(GNU General Public Licens ...