码迷,mamicode.com
首页 > 数据库 > 详细

SQL语句的简单使用

时间:2016-05-04 22:27:14      阅读:303      评论:0      收藏:0      [点我收藏+]

标签:

首先要先引入libsqlite3.0.tbd框架

DataBaseHandle.h

 1 #import <Foundation/Foundation.h>
 2 
 3 @interface DataBaseHandle : NSObject
 4 
 5 // 把这个类写成单例,方便外部使用
 6 + (DataBaseHandle *)shareDataBaseHandle;
 7 
 8 // 打开数据库
 9 - (void)openDB;
10 
11 // 关闭数据库
12 - (void)closeDB;
13 
14 // 创建表
15 - (void)createTable;
16 
17 // 插入数据
18 - (void)insertName:(NSString *)name
19             gender:(NSString *)gender
20                age:(NSInteger)age;
21 
22 // 通过uid去更新数据
23 - (void)updateWithUID:(NSInteger)uid;
24 
25 // 根据uid删除数据
26 - (void)deleteWithUID:(NSInteger)uid;
27 
28 // 查找所有数据
29 - (void)searchAll;
30 
31 // 根据姓名查找相关数据
32 - (void)searchWithName:(NSString *)name;
33 
34 @end

DataBaseHandle.m

  1 #import "DataBaseHandle.h"
  2 // 引入数据库操作的头文件
  3 #import <sqlite3.h>
  4 
  5 @interface DataBaseHandle ()
  6 
  7 // 数据库的存储路径
  8 @property (nonatomic, copy) NSString *dbPath;
  9 
 10 @end
 11 
 12 
 13 static DataBaseHandle *dataBase = nil;
 14 
 15 @implementation DataBaseHandle
 16 
 17 
 18 + (DataBaseHandle *)shareDataBaseHandle {
 19     
 20     if (dataBase == nil) {
 21         
 22         @synchronized(dataBase) {
 23             dataBase = [[DataBaseHandle alloc] init];
 24         }
 25     }
 26     return dataBase;
 27 }
 28 
 29 
 30 // 懒加载
 31 - (NSString *)dbPath {
 32     
 33     if (!_dbPath) {
 34         
 35         // 需求:路径存储在Documents文件夹下,数据库文件为person.sqlite
 36         NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
 37         
 38         _dbPath = [documentPath stringByAppendingPathComponent:@"person.sqlite"];
 39         
 40     }
 41     return _dbPath;
 42 }
 43 
 44 
 45 // 好多地方都会使用到数据库,所以初始化一个数据库的静态变量
 46 static sqlite3 *db = nil;
 47 
 48 - (void)openDB {
 49     
 50     // 接收打开的结果
 51     // 第一个参数:filename代表数据库的存储路径
 52     // 第二个参数:二级指针,数据库地址
 53     int result = sqlite3_open([self.dbPath UTF8String], &db);
 54     
 55     // result是个枚举值,有很多种情况
 56     if (result == SQLITE_OK) {
 57         NSLog(@"数据库打开成功");
 58     } else {
 59         NSLog(@"数据库打开失败");
 60     }
 61     
 62 }
 63 
 64 
 65 - (void)closeDB {
 66     
 67     int result = sqlite3_close(db);
 68     
 69     if (result == SQLITE_OK) {
 70         NSLog(@"关闭成功");
 71     } else {
 72         NSLog(@"关闭失败");
 73     }
 74 }
 75 
 76 
 77 // 创建表
 78 - (void)createTable {
 79     
 80     // 创建一个person表,字段:uid Integer类型 主键自增 不能为空, name text类型, gender text类型, age Integer类型
 81     
 82     NSString *createStr = @"create table if not exists person (uid integer primary key autoincrement not null, name text, gender text, age integer)";
 83     
 84     // 第一个参数:数据库
 85     // 第二个参数:sql语句,需要进行编码
 86     // 第三个参数:结果回调的一个函数
 87     // 第四个参数:回调函数的一个参数
 88     // 第五个参数:错误信息
 89     int result = sqlite3_exec(db, [createStr UTF8String], NULL, NULL, NULL);
 90     
 91     if (result == SQLITE_OK) {
 92         NSLog(@"创建表成功");
 93     } else {
 94         NSLog(@"创建表失败");
 95     }
 96     
 97     // 打印数据库路径,检查表是否创建成功
 98     NSLog(@"%@", _dbPath);
 99 }
100 
101 
102 // 插入数据
103 - (void)insertName:(NSString *)name gender:(NSString *)gender age:(NSInteger)age {
104     
105     // 当values不确定的情况下,使用?代替,稍后会进行其值的绑定过程
106     NSString *insertStr = @"insert into person(name, gender, age) values (?, ?, ?)";
107     
108     // 预执行语句
109     // 第一个参数:数据库
110     // 第二个参数:sql语句
111     // 第三个参数:有正负之分,例如:如果为1,代表只往后读一个字节;如果为负值(一般写-1),遇到特殊符号才会结束读取(\000, u000)
112     // 第四个参数:伴随指针,会随着数据库的相关操作确定其中?的值
113     // 第五个参数:取值的时候如果取的不全,剩下的值都存在这里
114     
115     // 伴随指针
116     sqlite3_stmt *stmt = nil;
117     
118     int result = sqlite3_prepare(db, [insertStr UTF8String], -1, &stmt, NULL);
119     
120     
121     // 判断执行结果
122     if (result == SQLITE_OK) {
123         
124         // 在操作成功的方法里进行?值的一些绑定设置
125         // 第一个参数:伴随指针
126         // 第二个参数:?的位置,从1开始
127         // 第三个参数:表示要插入的值
128         // 第四个参数:有正负之分,例如:如果为1,代表只往后读一个字节;如果为负值(一般写-1),遇到特殊符号才会结束读取(\000, u000)
129         // 第五个参数:回调函数
130         
131         sqlite3_bind_text(stmt, 1, name.UTF8String, -1, NULL);
132         sqlite3_bind_text(stmt, 2, gender.UTF8String, -1, NULL);
133         sqlite3_bind_int64(stmt, 3, age);
134         
135         // sql语句执行完毕
136         // 执行伴随指针,根据伴随指针的情况判定是否插入成功(SQLITE_DONE代表伴随指针执行成功)
137         if (sqlite3_step(stmt) == SQLITE_DONE) {
138             NSLog(@"插入成功");
139         } else {
140             NSLog(@"插入失败");
141         }
142         
143     } else {
144         
145         NSLog(@"result = %d", result);
146     }
147     
148     // 一定要释放伴随指针
149     sqlite3_finalize(stmt);
150     
151 }
152 
153 
154 // 更新
155 - (void)updateWithUID:(NSInteger)uid {
156     
157     NSString *updateStr = @"update person set name = ‘高月‘ where uid = ?";
158     
159     // 伴随指针
160     sqlite3_stmt *stmt = nil;
161     
162     int result = sqlite3_prepare(db, updateStr.UTF8String, -1, &stmt, NULL);
163     
164     if (result == SQLITE_OK) {
165         
166         sqlite3_bind_int64(stmt, 1, uid);
167         
168         if (sqlite3_step(stmt) == SQLITE_DONE) {
169             NSLog(@"更新数据成功");
170         } else {
171             NSLog(@"更新数据失败");
172         }
173         
174     } else {
175         NSLog(@"result = %d", result);
176     }
177     
178     sqlite3_finalize(stmt);
179 }
180 
181 
182 // 根据uid删除数据
183 - (void)deleteWithUID:(NSInteger)uid {
184     
185     NSString *deleteStr = [NSString stringWithFormat:@"delete from person where uid = %ld", uid];
186     
187     int result = sqlite3_exec(db, deleteStr.UTF8String, NULL, NULL, NULL);
188     
189     if (result == SQLITE_OK) {
190         
191         NSLog(@"删除成功");
192     } else {
193         
194         NSLog(@"删除失败");
195     }
196 }
197 
198 
199 // 查询所有
200 - (void)searchAll {
201     
202     NSString *searchAllStr = @"select *from person";
203     
204     
205     sqlite3_stmt *stmt = nil;
206     // 预执行
207     int result = sqlite3_prepare(db, searchAllStr.UTF8String, -1, &stmt, NULL);
208     
209     if (result == SQLITE_OK) {
210         
211         // 查询数据的时候,当不知道有多少次的时候使用while循环
212         // sqlite3_step(stmt) == SQLITE_ROW代表逐行执行数据
213         while (sqlite3_step(stmt) == SQLITE_ROW) {
214             // 第一个参数:伴随指针
215             // 第二个参数:代表这个字段的位置【只有带?的是从1开始,其余所有的都是从0开始的】
216             int uid = sqlite3_column_int(stmt, 0);
217             NSLog(@"uid = %d", uid);
218             
219             // 在OC代码中要使用C语言的相关内容,应该使用UTF——8
220             NSString *name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];
221             NSLog(@"name = %@", name);
222             
223             NSString *gender = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)];
224             NSLog(@"gender = %@", gender);
225             
226             int age = sqlite3_column_int(stmt, 3);
227             NSLog(@"age = %d", age);
228         }
229         
230     } else {
231         NSLog(@"result = %d", result);
232     }
233     
234     // 释放伴随指针
235     sqlite3_finalize(stmt);
236 }
237 
238 
239 // 根据姓名查找
240 - (void)searchWithName:(NSString *)name {
241     
242     NSString *searchStr = @"select uid, gender, age from person where name = ?";
243     
244     sqlite3_stmt *stmt = nil;
245     
246     int result = sqlite3_prepare(db, searchStr.UTF8String, -1, &stmt, NULL);
247     
248     if (result == SQLITE_OK) {
249         sqlite3_bind_text(stmt, 1, name.UTF8String, -1, NULL);
250         
251         while (sqlite3_step(stmt) == SQLITE_ROW) {
252             
253             int uid = sqlite3_column_int(stmt, 0);
254             NSString *gender = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];
255             int age = sqlite3_column_int(stmt, 2);
256             
257             NSLog(@"uid = %d, gender = %@, age = %d", uid, gender, age);
258         }
259         
260     } else {
261         NSLog(@"result = %d", result);
262     }
263     
264     // 释放伴随指针
265     sqlite3_finalize(stmt);
266 }
267 
268 @end

ViewController.m

 1 #import "ViewController.h"
 2 #import "DataBaseHandle.h"
 3 
 4 @interface ViewController ()
 5 
 6 @end
 7 
 8 @implementation ViewController
 9 
10 - (void)viewDidLoad {
11     [super viewDidLoad];
12         
13     DataBaseHandle *dataBaseHandle = [DataBaseHandle shareDataBaseHandle];
14     
15     // 打开数据库
16     [dataBaseHandle openDB];
17     
18     // 创建表
19     [dataBaseHandle createTable];
20     
21     // 插入数据
22     [dataBaseHandle insertName:@"圆圆" gender:@"美女" age:20];
23     
24     // 更新数据
25     [dataBaseHandle updateWithUID:1];
26     
27     // 查询所有数据
28     [dataBaseHandle searchAll];
29     
30     // 根据姓名查找
31     [dataBaseHandle searchWithName:@"高月"];
32     
33     // 根据uid删除
34 //    [dataBaseHandle deleteWithUID:2];
35     
36 }
37 
38 @end

 

SQL语句的简单使用

标签:

原文地址:http://www.cnblogs.com/zhizunbao/p/5459919.html

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