SQLite支持的常见数据类型如下所示。
–INTEGER 有符号的整数类型
–REAL 浮点类型
–TEXT 字符串类型,采用UTF-8和UTF-16字符编码
–BLOB 二进制大对象类型,能够存放任何二进制数据
 

(C语言中)使用步骤:
1.新建项目时,先导入系统框架(C语言). (libsqlite3)
2.头文件#import<sqlite3.h>
3. sqlite3_open(fileName.UTF8String, &_db); 打开或者创建一个数据

*_db自己定义一个sqlite3的成员变量.进行增删改查时要用

 
4.sqlite3_exec(_db, sql, NULL, NULL,&error);  //不带结果集的语句,只是对表做操作,不会返回出结果
*该函数可进行insert,delete,update操作.
5.查询操作select. //带结果集的查询语句,会返回出结果,从表中查询到的数据都会放到stmt结构体中
*sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL);做查询前准备,检测SQL语句是否正确.
*sqlite3_step(stmt) 提取查询到的数据,一次提取一条.//通过循环可以取出所有数据
*sqlite3_column_text(stmt, 0)取出第0列的数据.
6.关闭数据库 sqlite3_close(sqlite3 *);
————————————————————————————————————————————————————
————————————————————————————————————————————————————
执行带参数的SQL语句

NSString *sqlStr = @"INSERT OR REPLACE INTO note (cdate,content) VALUES (?,?)";

sqlite3_stmt *statement;
//预处理过程,产生结果集
if (sqlite3_prepare_v2(db, [sqlStr UTF8String], -1, &statement,

NULL) == SQLITE_OK)

{

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
  NSString *nsdate = [dateFormatter stringFromDate:model.date];

//绑定参数开始
  sqlite3_bind_text(statement, 1, [nsdate UTF8String], -1, NULL);  sqlite3_bind_text(statement, 2, [model.content UTF8String],

-1,    NULL);

//执行插入
if (sqlite3_step(statement) != SQLITE_DONE)

{

NSAssert(NO, @"插入数据失败。"); }

}

}

//清理结果集,防止内存泄露

sqlite3_finalize(statement);

单例模式:(这里主要用来保证初始化的数据库是唯一的,只要创建了一次,那么它就不会被再创建)

+ (NoteDAO*)sharedManager

{

static dispatch_once_t once;

dispatch_once(&once, ^{

sharedManager = [[self alloc] init];

[sharedManager   createEditableCopyOfDatabaseIfNeeded]; }

);

return sharedManager;

}

举例代码如下:

Student.h

 1 #import <Foundation/Foundation.h>
 2
 3 @interface Student : NSObject
 4 @property (assign,nonatomic)NSInteger ID;
 5 @property (copy,nonatomic)NSString *name;
 6 @property (assign,nonatomic)NSInteger age;
 7 @property (assign,nonatomic)char gender;
 8 @property (assign,nonatomic)float math;
 9 @property (assign,nonatomic)float english;
10 @property (assign,nonatomic)float chinese;
11 @end

Student.m

1 #import "Student.h"
2
3 @implementation Student
4 -(NSString*)description
5 {
6     return [NSString stringWithFormat:@"ID:%ld,name:%@,age:%ld,gender:%c,math:%.2lf,english:%.2lf,chinese:%.2lf",_ID,_name,_age,_gender,_math,_english,_chinese];
7 }
8 @end

StudentDAO.h(对每一个实体类的数据库封装起来,就采用这种XXXDAO.h/m的命名风格)

 1 #import <Foundation/Foundation.h>
 2 #import <sqlite3.h>
 3 @class Student;
 4 @interface StudentDAO : NSObject
 5 {
 6     sqlite3 *_db;
 7 }
 8 //单例的方法
 9 +(StudentDAO*)shareManager;
10
11 //初始化数据库:创建表,添加数据
12 -(void)initDb;
13
14 //添加学生记录
15 -(BOOL)addStudent:(Student *)stu;
16
17 //删除学生记录
18 -(BOOL)deleteStudentByName:(NSString *)name;
19
20 //修改学生记录
21 -(BOOL)updateStudnet:(Student*)stu;
22
23 //查询学生记录
24 //1.查询全部
25 -(NSArray *)queryStudentAll;
26 //2.查询符合条件的
27 -(Student *)queryStudentByName:(NSString*)name;
28
29 @end

StudentDAO.m

  1 #import "StudentDAO.h"
  2 #import "Student.h"
  3
  4
  5 static StudentDAO *instance = nil;
  6 @implementation StudentDAO
  7
  8 //对象只创建一次
  9 +(StudentDAO*)shareManager
 10 {
 11     static dispatch_once_t once;
 12     dispatch_once(&once, ^{
 13         //只执行一次
 14         instance = [StudentDAO new];
 15
 16         [instance initDb];
 17     });
 18
 19     return instance;
 20 }
 21
 22 //执行不返回结果集的sql语句
 23 -(BOOL)execSql:(NSString *)sql
 24 {
 25     char *errmsg = NULL;
 26     //增删改操作
 27     sqlite3_exec(_db, [sql UTF8String], NULL, NULL, &errmsg);
 28
 29     if(errmsg)
 30     {
 31         return NO;
 32     }
 33     else
 34     {
 35         return YES;
 36     }
 37 }
 38 //创建数据库文件路径
 39 -(NSString*)pathForDB
 40 {
 41     NSArray *dirs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
 42     NSString *documentPath = [dirs lastObject];
 43
 44     //NSLog(@"%@",documentPath);
 45
 46     return [documentPath stringByAppendingPathComponent:@"student.db"];
 47 }
 48
 49 //初始化数据库:创建表,添加数据
 50 -(void)initDb
 51 {
 52     //打开数据库
 53     //sqlite3_open(fileName.UTF8String,&_db);打开或创建一个数据
 54     //*_db自己定义一个sqlite3的成员变量.进行增删改查时要用
 55     if(sqlite3_open([[self pathForDB] UTF8String], &_db) == SQLITE_OK)
 56     {
 57         //创建学生表
 58         if([self execSql:@"create table student (id integer primary key autoincrement,name text,age integer,gender integer,math real,english real,chinese real)"])
 59         {
 60             //表中添加测试数据
 61             for(int i=0; i<5; i++)
 62             {
 63                 Student *stu = [Student new];
 64                 stu.name = [NSString stringWithFormat:@"stu%d",i+1];
 65                 stu.age = 20+i;
 66                 stu.gender = 'M';
 67                 stu.math = 80+i;
 68                 stu.english = 90+i;
 69                 stu.chinese = 80+i;
 70
 71                 [self addStudent:stu];
 72             }
 73         }
 74         //关闭数据库
 75        sqlite3_close(_db);
 76     }
 77 }
 78
 79 //添加学生记录
 80 -(BOOL)addStudent:(Student *)stu
 81 {
 82     NSString *insertSql = @"insert into student (name,age,gender,math,english,chinese) values(?,?,?,?,?,?)";
 83
 84     //打开数据库
 85     if(sqlite3_open([[self pathForDB]UTF8String], &_db) == SQLITE_OK)
 86     {
 87         //准备结果集
 88         //提取数据一次一条
 89         sqlite3_stmt *Pstmt = NULL;
 90         //查询前准备,看是否正确
 91         if(sqlite3_prepare_v2(_db, [insertSql UTF8String], -1, &Pstmt, NULL) == SQLITE_OK)
 92         {
 93             //绑定参数
 94             sqlite3_bind_text(Pstmt, 1, [stu.name UTF8String], -1, NULL);
 95             sqlite3_bind_int(Pstmt, 2, (int)stu.age);
 96             sqlite3_bind_int(Pstmt, 3, stu.gender);
 97             sqlite3_bind_double(Pstmt, 4, stu.math);
 98             sqlite3_bind_double(Pstmt, 5, stu.english);
 99             sqlite3_bind_double(Pstmt, 6, stu.chinese);
100
101             //执行SQL语句
102             if(sqlite3_step(Pstmt) == SQLITE_DONE)
103             {
104                 return YES;
105             }
106         }
107         //清理结果集
108         sqlite3_finalize(Pstmt);
109
110         //关闭数据库
111         sqlite3_close(_db);
112     }
113     return NO;
114 }
115
116 //删除学生记录
117 -(BOOL)deleteStudentByName:(NSString *)name
118 {
119     NSString *sql = @"delete from student where name = ?";
120
121     //打开数据库
122     if(sqlite3_open([[self pathForDB]UTF8String], &_db) == SQLITE_OK)
123     {
124         //准备结果集
125         sqlite3_stmt *Pstmt = NULL;
126         if(sqlite3_prepare_v2(_db, [sql UTF8String], -1, &Pstmt, NULL)== SQLITE_OK)
127         {
128             //绑定参数
129             sqlite3_bind_text(Pstmt, 1, [name UTF8String], -1, NULL);
130
131
132             //执行SQL语句
133             if(sqlite3_step(Pstmt) == SQLITE_DONE)
134             {
135                 return YES;
136             }
137         }
138         //清理结果集
139         sqlite3_finalize(Pstmt);
140
141         //关闭数据库
142         sqlite3_close(_db);
143     }
144     return NO;
145 }
146
147 //修改学生记录
148 -(BOOL)updateStudnet:(Student*)stu
149 {
150     NSString *sql = @"update student set math = ? where name = ?";
151
152     //打开数据库
153     if(sqlite3_open([[self pathForDB]UTF8String], &_db) == SQLITE_OK)
154     {
155         //准备结果集
156         sqlite3_stmt *Pstmt = NULL;
157         if(sqlite3_prepare_v2(_db, [sql UTF8String], -1, &Pstmt, NULL) == SQLITE_OK)
158         {
159             //绑定参数
160             sqlite3_bind_double(Pstmt,1,stu.math);
161             sqlite3_bind_text(Pstmt, 2, [stu.name UTF8String], -1, NULL);
162
163             //执行SQL语句
164             if(sqlite3_step(Pstmt) == SQLITE_DONE)
165             {
166                 return YES;
167             }
168         }
169         //清理结果集
170         sqlite3_finalize(Pstmt);
171
172         //关闭数据库
173         sqlite3_close(_db);
174     }
175     return NO;
176 }
177
178 //查询学生记录
179 //1.查询全部
180 -(NSArray *)queryStudentAll
181 {
182     NSMutableArray *arrayM = [NSMutableArray array];
183
184     //打开数据库
185     if(sqlite3_open([[self pathForDB]UTF8String], &_db) == SQLITE_OK)
186     {
187         //准备结果集
188         sqlite3_stmt *Pstmt = NULL;
189         if(sqlite3_prepare_v2(_db, "select * from student", -1, &Pstmt, NULL) == SQLITE_OK)
190         {
191             //遍历结果集
192             while (sqlite3_step(Pstmt) == SQLITE_ROW)
193             {
194                 Student *stu = [Student new];
195
196                 stu.ID = sqlite3_column_int(Pstmt, 0);
197                 stu.name = [NSString stringWithFormat:@"%s",sqlite3_column_text(Pstmt, 1)];
198                 stu.age = sqlite3_column_int(Pstmt, 2);
199                 stu.gender = sqlite3_column_int(Pstmt, 3);
200                 stu.math = sqlite3_column_double(Pstmt, 4);
201                 stu.english = sqlite3_column_double(Pstmt, 5);
202                 stu.chinese = sqlite3_column_double(Pstmt, 6);
203
204                 [arrayM addObject:stu];
205             }
206         }
207         //清理结果集
208         sqlite3_finalize(Pstmt);
209
210         //关闭数据库
211         sqlite3_close(_db);
212     }
213     return arrayM;
214 }
215 //2.查询符合条件的
216 -(Student *)queryStudentByName:(NSString*)name
217 {
218     Student *stu;
219     NSString *sql = @"select * from student where name = ?";
220
221     //打开数据库
222     if(sqlite3_open([[self pathForDB]UTF8String], &_db) == SQLITE_OK)
223     {
224         //准备结果集
225         sqlite3_stmt *Pstmt = NULL;
226         if(sqlite3_prepare_v2(_db, [sql UTF8String], -1, &Pstmt, NULL) == SQLITE_OK)
227         {
228             //绑定参数
229             sqlite3_bind_text(Pstmt, 1, [name UTF8String], -1, NULL);
230
231             //执行SQL语句
232             if(sqlite3_step(Pstmt) == SQLITE_ROW)
233             {
234                 stu = [Student new];
235
236                 stu.ID = sqlite3_column_int(Pstmt, 0);
237                 stu.name = [NSString stringWithFormat:@"%s",sqlite3_column_text(Pstmt, 1)];
238                 stu.age = sqlite3_column_int(Pstmt, 2);
239                 stu.gender = sqlite3_column_int(Pstmt, 3);
240                 stu.math = sqlite3_column_double(Pstmt, 4);
241                 stu.english = sqlite3_column_double(Pstmt, 5);
242                 stu.chinese = sqlite3_column_double(Pstmt, 6);
243             }
244         }
245
246         //清理结果集
247         sqlite3_finalize(Pstmt);
248
249         //关闭数据库
250         sqlite3_close(_db);
251     }
252     return stu;;
253 }
254 @end

ViewController.m

 1 #import "ViewController.h"
 2 #import "Student.h"
 3 #import "StudentDAO.h"
 4
 5 @interface ViewController ()
 6
 7 @end
 8
 9 @implementation ViewController
10
11 - (void)viewDidLoad {
12     [super viewDidLoad];
13     //测试stuDAO
14     //创建单例对象
15     StudentDAO *stuDAO = [StudentDAO shareManager];
16
17
18     //查询所有的记录
19     NSArray *students = [stuDAO queryStudentAll];
20     NSLog(@"%@",students);
21
22     //删除一条记录
23     [stuDAO deleteStudentByName:@"stu3"];
24
25     //修改记录
26     Student *stu = [Student new];
27     stu.name = @"stu4";
28     stu.math = 94.5f;
29     [stuDAO updateStudnet:stu];
30
31
32     //通过名字查询学生
33     Student *stu2 = [stuDAO queryStudentByName:@"stu5"];
34     NSLog(@"%@",stu2);
35
36     //查询所有的记录
37     students = [stuDAO queryStudentAll];
38     NSLog(@"%@",students);
39 }
40 @end

转载于:https://www.cnblogs.com/XYQ-208910/p/4824713.html

iOS:面向对象的思想使用sqlite数据库相关推荐

  1. 使用iOS原生sqlite3框架对sqlite数据库进行操作

    摘要: iOS中sqlite3框架可以很好的对sqlite数据库进行支持,通过面向对象的封装,可以更易于开发者使用. 使用iOS原生sqlite3框架对sqlite数据库进行操作 一.引言 sqlit ...

  2. iOS - 使用 SQLite 数据库实现数据持久化

    前言 SQLite 是一款主流的嵌入式关系型数据库,它的主要特点是轻量级和跨平台,是当前很多嵌入式操作系统中数据库的首选. 数据库也是客户端开发中常用的一种数据持久化手段,本文主要介绍在客户端开发中常 ...

  3. sqlite数据库插入和读取图片数据 (for ios)

    为什么80%的码农都做不了架构师?>>>    在iOS下用sqlite数据库存储图片,先把你的图片转换成 NSData 形式,然后在数据库添加一行 blob 数据 假定数据库中存在 ...

  4. iOS - Swift SQLite 数据库存储

    前言 采用 SQLite 数据库来存储数据.SQLite 作为一中小型数据库,应用 iOS 中,跟前三种保存方式相比,相对比较复杂一些. 注意:写入数据库,字符串可以采用 char 方式,而从数据库中 ...

  5. iOS - OC SQLite 数据库存储

    前言 采用 SQLite 数据库来存储数据.SQLite 作为一中小型数据库,应用 iOS 中,跟前三种保存方式相比,相对比较复杂一些. 注意:写入数据库,字符串可以采用 char 方式,而从数据库中 ...

  6. Qt5 开发 iOS 应用之访问 SQLite 数据库

    开发环境: macOS 10.12.1 Xcode 8.1 Qt 5.8 iPhone 6S+iOS 10.1.1 源代码: 我在 Qt 程序里指定了数据库的名称来创建数据库,在 Win10.Andr ...

  7. iOS编程------SQLite / 数据库

    /* # Sqlite3## 创建数据库方法 ## 一.终端命令进入到 /Users/wushumin/Documents/Sqlite 文件夹下. > cd Documents/Sqlite ...

  8. 配置郭神的LitePal(面向对象一样操作sqlite数据库,不再使用SQL语句)

    配置郭神的LitePal(面向对象一样操作sqlite数据库,不再使用SQL语句) 配置过程可见: https://github.com/guolindev/LitePal 但是我要补充一个小问题 然 ...

  9. IOS sqlite数据库增删改查

    1.简介 简单封装sqlite数据库操作类 BaseDB 用于完成对sqlite的增删改查,使用前先导入libsqlite3.0.dylib库 2.BaseDB.h // // BaseDB.h // ...

最新文章

  1. 「AI 质检员」在富士通上岗,效率比人工高 25%
  2. 几篇较新的计算机视觉Self-Attention
  3. 徐直军 华为没有鸿蒙,华为徐直军:“鸿蒙”这个名字是媒体取的
  4. 大脑构造图与功能解析_施工技术特辑 | 全套脚手架三维构造图解析
  5. Qt5下OpenGL程序的新写法
  6. mysql 表中添加数据类型_MySQL数据表添加字段(三种方式)
  7. 2.1.2数据通信基础知识
  8. php判断网址包含字符,php中判断一个字符串包含另一个字符串的方法
  9. php的toast,Windows通知服务:401尝试在PHP中创建Toast通知时无效令牌
  10. 分布式系统如何设计,看看Elasticsearch是怎么做的
  11. PHP函数set_magic_quotes_runtime()的作用
  12. 历年软考网络工程师考试真题及答案
  13. Python遗传算法解决作业调度问题(JSP)
  14. (转)iOS及Mac开源项目和学习资料【超级全面】
  15. 机器学习笔记之基础概念
  16. Adaptive Object Detection Using Adjacency and Zoom Prediction
  17. python小乌龟绘制迷宫_python小乌龟turtle数学作图
  18. 基于JAVA校园共享单车系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  19. Java实现根据Word模板填充表格数据(poi方式),以及doc和docx转PDF,最全最详细版本,解决外部引用jar在linux上报ClassNotFound的问题。
  20. 计算机软件ae常用英语,AE英文插件该怎么翻译?

热门文章

  1. JS数据结构与算法——选择排序(把小的数字依次往前放)
  2. Mongoose 数据校验
  3. Scala 入门2(数组、List、Set、Map、元组、Option、Iterator)
  4. 天池 在线编程 到达终点
  5. LeetCode 1662. 检查两个字符串数组是否相等
  6. LeetCode 1367. 二叉树中的列表(双重递归)
  7. LeetCode 1363. 形成三的最大倍数(贪心,难)
  8. LeetCode 539. 最小时间差(哈希)
  9. LeetCode 876. 链表的中间结点(快慢指针)
  10. c2010页面闪现_vue使用v-if v-show页面闪烁,div闪现的解决方法