码迷,mamicode.com
首页 > 移动开发 > 详细

ios数据库SQLite实现

时间:2015-09-16 23:16:42      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:

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);

 

ios数据库SQLite实现

标签:

原文地址:http://www.cnblogs.com/pp123/p/4814763.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!