ios数据库SQLite实现

SQLite嵌入式数据库

1.支持时间,不需要配置,不需要安装,不需要管理员;

2.支持大部分SQL92;

3.完整的数据库保存在磁盘上面的一个文件,同一个数据库文件可以在不同机器上面使用.最大支持数据库到2T;

4.占用内存少;

// 如果你使用数据库的话 要引入一个框架

// libsqlite3.0.dylib框架

  1 创建一个studentmodel类
  2 #import <Foundation/Foundation.h>
  3
  4 @interface LanOuStudent : NSObject
  5
  6 // 名字
  7 @property (nonatomic, retain) NSString *name;
  8 // 性别
  9 @property (nonatomic, retain) NSString *gender;
 10 // 年龄
 11 @property (nonatomic, assign) NSInteger age;
 12 // 学号
 13 @property (nonatomic, assign) NSInteger number;
 14
 15 @end
 16
 17 创建一个SQliteMananger类
 18 .h文件
 19 // 使用的话需要引入头文件#import <sqlite3.h>
 20 #import <Foundation/Foundation.h>
 21 #import <sqlite3.h>
 22 #import "LanOuStudent.h"
 23
 24 @interface SQliteMananger : NSObject
 25
 26 // 初始化方法
 27 + (SQliteMananger *)shareManager;
 28
 29 // 如果你使用数据库的话 要引入一个框架
 30 // libsqlite3.0.dylib框架
 31 // 使用的话 需要引入头文件#import <sqlite3.h>
 32
 33 // 打开数据库
 34 // sqlite3 * 表示咱们的数据库
 35 - (sqlite3 *)openDB;
 36
 37 // 关闭数据库
 38 - (void)closeDB;
 39
 40 // 创建一个表
 41 - (void)createTable;
 42
 43 // 插入数据
 44 - (void)insertWith:(LanOuStudent *)student;
 45 // 删除成功 删除20岁以上的
 46 - (void)deleteStudentWithAge:(NSInteger)age;
 47 // 更新数据  根据名字修改年龄
 48 - (void)updateName:(NSString *)name setAge:(NSInteger)age;
 49
 50 // 查询数据  根据名字和年龄查询学生
 51 - (LanOuStudent *)queryStudentWithName:(NSString *)name andAge:(NSInteger)age;
 52 // 查询所有学生的信息
 53 - (NSArray *)queryAllStudents;
 54
 55 @end
 56 .m文件
 57 #import "SQliteMananger.h"
 58
 59 @implementation SQliteMananger
 60
 61 // 创建单例类 进行数据库 操作方法的封装
 62
 63 // 初始化方法
 64 + (SQliteMananger *)shareManager
 65 {
 66     static SQliteMananger *manager = nil;
 67     if (manager == nil) {
 68         manager = [[SQliteMananger alloc] init];
 69     }
 70     return manager;
 71 }
 72
 73 // 定义一个静态指针 负责连接数据库
 74 // 保证数据库 直到程序结束才被释放
 75 static sqlite3 *db = nil;
 76
 77 // 打开数据库
 78 // sqlite3 * 表示咱们的数据库
 79 - (sqlite3 *)openDB
 80 {
 81     // 判断
 82     // 如果不为空就说明数据库存在直接返回就行
 83     if (db != nil) {
 84         return db;
 85     }
 86     // 不存在就创建一个数据库
 87     // 获取文件路径
 88     NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
 89     // 拼接路径
 90     // 数据库名称 Student.sqlite
 91     NSString *dbPath = [documentsPath stringByAppendingPathComponent:@"Student.sqlite"];
 92     NSLog(@"%@", dbPath);
 93
 94     // 创建数据库
 95     // 参数1 文件路径 需要把oc的字符串转换一下类型  dbPath.UTF8String
 96     // 参数2 数据库地址
 97     // sqlite3_open 该函数 如果有数据库就打开 没有就创建一个出来
 98     int result = sqlite3_open(dbPath.UTF8String, &db);
 99
100     // 查看命令返回结果
101     if (result == SQLITE_OK) {
102         NSLog(@"创建成功 或者打开成功");
103     } else {
104         NSLog(@"创建失败 或者打开失败");
105     }
106     return db;
107 }
108
109 // 关闭数据库
110 - (void)closeDB
111 {
112     // 关闭数据库
113     int result = sqlite3_close(db);
114     if (result == SQLITE_OK) {
115         NSLog(@"关闭成功");
116         // 如果成功的话 把数据库置为空
117         db = nil;
118     } else {
119         NSLog(@"关闭数据库失败");
120     }
121 }
122
123 // 创建一个表
124 - (void)createTable
125 {
126     // 1.打开数据库
127     db = [self openDB];
128     // 2.写创建表的sql语句
129     NSString *sql = @"create table IF NOT EXISTS lanOuStudent(number integer primary key not NULL, name text not NULL, gender text not NULL, age integer not NULL)";
130     // 3.执行sql语句
131     // char **errmsg 错误信息
132     char *error = nil;
133     int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, &error);
134     // 4.判断是否成功
135     if (result == SQLITE_OK) {
136         NSLog(@"创建表成功");
137     } else  {
138         NSLog(@"@创建表失败");
139     }
140     // 5.关闭数据库
141     [self closeDB];
142 }
143
144 // 插入数据
145 // 插入的不是model 而是 model信息
146 - (void)insertWith:(LanOuStudent *)student
147 {
148     // 打开数据库
149     db = [self openDB];
150     // 写sql语句
151     NSString *sql = [NSString stringWithFormat:@"insert into lanOuStudent(name, gender, age, number) values(‘%@‘, ‘%@‘, ‘%ld‘, ‘%ld‘)", student.name, student.gender, student.age, student.number];
152     // 3.执行语句
153     int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL);
154     // 4.判断返回值结果 判断是否执行成功
155     if (result == SQLITE_OK) {
156         NSLog(@"插入成功");
157     } else {
158         NSLog(@"插入失败");
159     }
160     // 5 关闭数据库
161     [self closeDB];
162 }
163
164 // 删除成功 删除20岁以上的
165 - (void)deleteStudentWithAge:(NSInteger)age
166 {
167     // 1.打开数据库
168     [self openDB];
169     // 2.写sql语句
170     NSString *sql = [NSString stringWithFormat:@"delete from lanOuStudent where age > ‘%ld‘", age];
171     // 3.执行语句
172     int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL);
173     // 4.判断是否成功
174     if (result == SQLITE_OK) {
175         NSLog(@"删除成功");
176     } else {
177         NSLog(@"删除失败");
178     }
179     // 关闭数据库
180     [self closeDB];
181 }
182 // 更新数据  根据名字修改年龄
183 - (void)updateName:(NSString *)name setAge:(NSInteger)age
184 {
185     // 1.打开数据库
186     [self openDB];
187     // 2.写sql语句
188     NSString *sql = [NSString stringWithFormat:@"update lanOuStudent set age = ‘%ld‘ where name = ‘%@‘", age, name];
189     // 3.执行sql语句
190     int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL);
191     // 4.判断是否成功
192     if (result == SQLITE_OK) {
193         NSLog(@"更新成功");
194     } else {
195         NSLog(@"失败");
196     }
197     // 5.关闭数据库
198     [self closeDB];
199 }
200
201 // 查询数据  根据名字和年龄查询学生
202 - (LanOuStudent *)queryStudentWithName:(NSString *)name andAge:(NSInteger)age
203 {
204     // 1.打开数据库
205     db = [self openDB];
206     // 2.写sql语句
207     NSString *sql = [NSString stringWithFormat:@"select *from lanOuStudent where name = ‘%@‘ and age = ‘%ld‘",name , age];
208     // 3.创建跟随指针 保存sql语句
209     sqlite3_stmt *stmt = nil;
210     // 4.执行查询语句
211     // int nByte 表示sql语句的长度 -1 代表无限长
212     // const char **pzTail 截取未执行的部分的语句
213     int result = sqlite3_prepare_v2(db, sql.UTF8String, -1, &stmt, NULL);
214     // 5.判断执行语句是否成功
215     if (result == SQLITE_OK) {
216         NSLog(@"查询语句执行成功");
217         // 6.绑定查询条件信息
218         // 查询的条件是什么类型的 就算bind_啥类型
219         // 参数2 int 查询条件的顺序 从1开始
220         // 参数3 const char * 填查询条件的 字段名
221         // 参数4 int n 长度 -1
222         // 参数5 void (*)(void *) 绑定后执行的函数
223
224         // 绑定的条件1
225         sqlite3_bind_text(stmt, 1, name.UTF8String, -1, NULL);
226         // 绑定条件2
227         sqlite3_bind_int(stmt, 2, -1);
228
229         // 7.开始查询
230         // sqlite3_step(stmt) == SQLITE_ROW
231         // 如果这条语句可以被找到 就返回SQLITE_ROW
232         while (sqlite3_step(stmt) == SQLITE_ROW) {
233          // 8.获取数据
234             // 参数2 int iCol 在数据库表中列数 从0开始 需要打开数据库看一下在第几列
235             char *name = (char *)sqlite3_column_text(stmt, 1);
236             char *gender = (char *)sqlite3_column_text(stmt, 2);
237             int age = sqlite3_column_int(stmt, 3);
238             int number = sqlite3_column_int(stmt, 0);
239
240             // 9.给对象进行赋值
241             LanOuStudent *student = [[LanOuStudent alloc] init];
242             // 把c语言字符串 转回OC字符串
243             student.name = [NSString stringWithUTF8String:name];
244             student.gender = [NSString stringWithUTF8String:gender];
245             student.age = age;
246             student.number = number;
247
248             // 10.释放跟随指针
249             sqlite3_finalize(stmt);
250
251             // 关闭数据库
252             [self closeDB];
253
254             // 11 返回数据 并释放对象
255             return [student autorelease];
256         }
257     } else {
258         NSLog(@"查询语句执行失败");
259     }
260     // 12.关闭数据库
261     [self closeDB];
262     return nil;
263 }
264
265 // 查询所有学生的信息
266 - (NSArray *)queryAllStudents
267 {
268     // 1.打开数据库
269     db = [self openDB];
270     // 2.写sql语句
271     NSString *sql = [NSString stringWithFormat:@"select *from lanOuStudent"];
272     // 3.创建一个跟随指针
273     sqlite3_stmt *stmt = nil;
274     // 4.执行查询语句
275     int result = sqlite3_prepare_v2(db, sql.UTF8String, -1, &stmt, NULL);
276     // 5.判断是否成功
277     if (result == SQLITE_OK) {
278         NSLog(@"执行语句成功");
279         // 6.不用绑定查询 并创建一个数组 保存查询好的model
280         NSMutableArray *array = [NSMutableArray array];
281         // 7.开始查询
282         while (sqlite3_step(stmt) == SQLITE_ROW) {
283             // 8.读取数据
284             char *name = (char *)sqlite3_column_text(stmt, 1);
285             char *gender = (char *)sqlite3_column_text(stmt, 2);
286             int age = sqlite3_column_int(stmt, 3);
287             int number = sqlite3_column_int(stmt, 0);
288             // 9.创建model并赋值
289             LanOuStudent *student = [[LanOuStudent alloc] init];
290             student.name = [NSString stringWithUTF8String:name];
291             student.gender = [NSString stringWithUTF8String:gender];
292             student.age = age;
293             student.number = number;
294
295             // 10.把model装进数组中
296             [array addObject:student];
297             // 11.释放学生对象
298             [student release];
299         }
300         // 12.释放跟随指针
301         sqlite3_finalize(stmt);
302         // 13.关闭数据库
303         [self closeDB];
304         // 14. 返回数组
305         return array;
306     } else {
307         NSLog(@"执行失败");
308     }
309     // 15.关闭数据库
310     [self closeDB];
311     return nil;
312 }
313
314 @end
315 在appdelegate.m中调用引入头文件
316 #import "SQliteMananger.h"
317 // 创建一个操作数据库manager对象
318     SQliteMananger *manager = [SQliteMananger shareManager];
319     // 打开数据库
320     [manager openDB];
321     // 关闭数据库
322     [manager closeDB];
323
324     // 创建一个表
325     [manager createTable];
326
327     // 插入数据
328     LanOuStudent *student1 = [[LanOuStudent alloc] init];
329     student1.name = @"小芳";
330     student1.age = 18;
331     student1.gender = @"女";
332     student1.number = 120908042;
333     [manager insertWith:student1];
334
335     LanOuStudent *student2 = [[LanOuStudent alloc] init];
336     student1.name = @"励志";
337     student1.age = 20;
338     student1.gender = @"男";
339     student1.number = 1;
340     [manager insertWith:student1];
341
342     LanOuStudent *student3 = [[LanOuStudent alloc] init];
343     student1.name = @"体力";
344     student1.age = 23;
345     student1.gender = @"男";
346     student1.number = 2;
347     [manager insertWith:student1];
348
349     [manager deleteStudentWithAge:20];
350
351     [manager updateName:@"小芳" setAge:23];
352
353     LanOuStudent *student = [manager queryStudentWithName:@"小芳" andAge:18];
354     NSArray *array = [manager queryAllStudents];
355     NSLog(@"%@", array);
时间: 2024-10-11 14:22:31

ios数据库SQLite实现的相关文章

iOS 数据库SQLite

SQLite介绍 SQLite是一款轻型的嵌入式数据库,安卓和iOS开发使用的都是SQLite数据库. 它的特点: 它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了. 它的处理速度比MySQL.PostgreSQL这两款著名的数据库都还快. 它是C语言框架的,跨平台性强. 要在iOS中使用SQLite3,需要在Xcode导入libsqlite3的库 下面是结合SQL语句完成数据库操作,使用到的是上面定义的方法: 创建表: create table 表名称(字段1,字段2,--,字

iOS数据库SQLite基本操作

数据库操作几点建议: 注意sql执行语句的字符串的拼写.(一定要注意拼写,深受其害  T_T  ) Obj-C中SQLite常用函数. (没几个,sqlite3_open,sqlite3_close,sqlite3_exec,sqlite3_perpare_v2,sqlite3_step,sqlite3_column_*,……)(外加两个对象:sqlite,sqlite_stmt) SQLite语法.(一般的数据库操作都一样) 如果做大一点的项目的话,数据库操作还是尽可能的封装吧. 善用搜索.(

ios UI数据库 sqlite小型数据库的增、删、改、查、排序

#import "table.h" @implementation table // 1.创建表 每一列之间用',',如果存在就不创建 create table if not exists t_class( class_id integer primary key autoincrement, class_name varchar, person_count integer default 0) // 1.1// 删除表 drop table if exists t_person //

iOS开发数据库SQLite的使用

iOS系统自带Core Data来进行持久化处理,而且Core Data可以使用图形化界面来创建对象,但是Core Data不是关系型数据库,对于Core Data来说比较擅长管理在设备上创建的数据持久化存储用户创建的对象,但是要处理大量的数据时就应该优先选择SQL关系型数据库来存储这些数据. Core Data在后台也是使用SQLite来存储数据的,但是开发人员不能直接访问这些数据,只能通过Core Data提供的API来操作,如果一旦人为的通过SQLite修改这些数据那么使用Core Dat

IOS之数据库Sqlite以及MeasSQlite 软件的使用

IOS之数据库Sqlite以及MeasSQlite 软件的使用 1.数据库简介 需求: 在需要保持大量的结构比较复杂的数据时用 数据库保持 如 交通考试 常用的数据库 (1)Microsoft SQL Server 2000/2008   是 微软Microsoft 推出的关系型数据库管理系统 (2)Oracle  比较复杂 大型企业使用较多 (3)Mysqi   网站使用较多 (4)Sqlite  是一款轻型的数据库,是遵守ACID的关系型数据库管理系统 移动端使用 本地数据库 访问速度快 

IOS 数据库管理系统(SQLite)

嵌入式数据库 SQLite嵌入式数据库优点 1.支持事件,不需要配置,不需要安装,不需要管理员 2.支持发部分SQL92 3.完整的数据库保存在磁盘上面一个文件,同一个数据库文件可以在不同机器上面使用,最大支持数据库到2T 4.整个系统少于3万行,少于250KB的内存占用 Linux系统级的SQLite技术实现框架libsqlite3.0.dylib 开始使用SQLite 1.引入<sqlite3.h>头文件 2.打开数据库 3.执行SQL命令 4.关闭数据库 一下代码展示整个数据库的 打开,

[iOS]数据库第三方框架FMDB详细讲解

[iOS]数据库第三方框架FMDB详细讲解 初识FMDB iOS中原生的SQLite API在进行数据存储的时候,需要使用C语言中的函数,操作比较麻烦.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.PlausibleDatabase.sqlitepersistentobjects等. FMDB是一款简洁.易用的封装库.因此,在这里推荐使用第三方框架FMDB,它是对libsqlite3框架的封装,用起来的步骤与SQLite使用类似,并且它对于多线程的并发操作进行了处理,所以

iOS 数据库操作(使用FMDB)

iOS 数据库操作(使用FMDB) iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.PlausibleDatabase.sqlitepersistentobjects等,FMDB (https://github.com/ccgus/fmdb) 是一款简洁.易用的封装库,这一篇文章简单介绍下FMDB的使用. 在FMDB下载文件后,工程中必须导入如下文件,并使用 libsqlite3.dylib 依赖包.

iOS数据库操作之coredata详细操作步骤

CHENYILONG Blog iOS数据库操作之coredata详细操作步骤 技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong iOS应用数据存取的常用方式 ? XML属性列表 -- PList? NSKeyedArchiver 归档 ?Preference(偏好设置) ? SQLite3? Core DataCore Data简介 ? Core Data 是iOS SDK 里的一个很强大的