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

ios开发——实战OC篇&SQLite3的实际应用

时间:2015-06-21 17:08:41      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

SQLite3的实际应用

前面的文章中介绍了SQlite,并且介绍了他的各种语法及使用方法。

但是没有正在项目中使用特,今天就开始做一个小小的实例,就是使用SQLite3来实现数据库的相应操作并且把他应用到实际项目中去。

 

一:准备

首先新建好了一项目之后你需要在你的项目中带入libsql3.0.dylib这个库,当然libsql3.dylib也是一样的(目前他们到底有什么区别笔者还没有弄清楚,如果你知道可以分享一些,哈哈)。

 

二:环境

上面的步骤完成了之后,我们就开始先搭建一下环境,需求如下:

  • 两个文本框,并且设置输出口(IBOutelet)
  • 一个按钮设置动作(IBAction)
  • 最后在界面上放一个tableView,也需要设置他的输出口(IBOutlet)

代码如下:

1 @property (weak, nonatomic) IBOutlet UITextField *name;
2 @property (weak, nonatomic) IBOutlet UITextField *age;
3 - (IBAction)Add;
4 
5 @property (weak, nonatomic) IBOutlet UITableView *tableView;

将上面的控件做相应的调整之后就会显示如下视图:

技术分享

 

三:打开-创建数据库

在要实现的文件中倒入数据库:

 1 #import <sqlite3.h> 

创建一个数据库属性:

 1 @property (nonatomic, assign) sqlite3 *db; 

数据库打开与创建;

 1 /**     初始化数据库      */
 2 -(void)setUpDB
 3 {
 4     //数据库文件的路径
 5     NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"iCocos.sqlite"];
 6     
 7     //打开数据库(链接)
 8     BOOL sqlOpen = sqlite3_open(path.UTF8String, &_db);
 9     if (sqlOpen == SQLITE_OK) {
10         NSLog(@"打开数据库成功");//NSAssert(YES, @"打开数据成功");
11         
12         //创建表格
13         //SQL语句
14         const char *sql = "CREATE TABLE IF NOT EXISTS t_user (id integer PRIMARY KEY, name text NOT NULL, age real);";
15         char *err = NULL;
16         //执行创建表格语句
17         sqlite3_exec(self.db, sql, NULL, NULL, &err);
18         if (err) {
19             NSLog(@"创建表格失败 -- %s", err);
20         } else {
21             NSLog(@"创建表格成功");
22         }
23     } else {
24         NSLog(@"打开失败");
25     }
26     
27     //sqlite3_close(db);
28 }

这里如果成功了你的沙盒中的Document中就会这样的文件

技术分享

打开之后就可以看到里面有对应的属性(这里打开需要安装对应的额数据库软件)

 

四:数据库操作的实现

这里我们先建一个模型,用于存放Sqlite中数据的条数,

倒入模型

 1 #import "Users.h"

并且在里面定义两个属性

 1 @property (nonatomic, copy) NSString *name; 

3 @property (nonatomic, copy) NSString *age; 

创建一个用于存放模型数据的数组

 1 @property (nonatomic, strong) NSMutableArray *users;

懒加载这个数组

1 //懒加载
2 -(NSMutableArray *)users
3 {
4     //如果为空
5     if (!_users) {
6         self.users = [[NSMutableArray alloc] init];
7     }
8     return _users;
9 }

实现点击增加按钮新增一条数据,并且在tableView上面做实时的显示

 1 //插入数据
 2 - (IBAction)Add {
 3     //插入数据库
 4     char *err = NULL;
 5     //SQL语句
 6     NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_user (name, age) VALUES (‘%@‘, %f);", self.name.text, self.age.text.doubleValue];
 7     //执行插入语句
 8     sqlite3_exec(self.db, sql.UTF8String, NULL, NULL, &err);
 9     if (err) {
10         NSLog(@"插入数据库失败 --- %s", err);
11     }
12     
13     //初始化模型数据
14     Users *user = [[Users alloc] init];
15     user.name = self.name.text;
16     user.age = self.age.text;
17     
18     //将模型数据
19     [self.users addObject:user];
20     //刷新表格
21     [self.tableView reloadData];
22 }

实现tableView的数据源方法使数据做相应的显示

 1 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 2 {
 3     return self.users.count;
 4 }
 5 
 6 #pragma mark 每当有一个cell进入视野范围内就会调用,返回当前这行显示的cell
 7 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 8 {
 9     // 0.用static修饰的局部变量,只会初始化一次
10     static NSString *ID = @"cell";
11     
12     // 1.拿到一个标识先去缓存池中查找对应的Cell
13     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
14     
15     // 2.如果缓存池中没有,才需要传入一个标识创建新的Cell
16     if (cell == nil) {
17         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
18         cell.backgroundColor = [UIColor lightGrayColor];
19     }
20     
21     //刷新数据
22     Users *user = self.users[indexPath.row];
23     cell.textLabel.text = user.name;
24     cell.detailTextLabel.text = user.age;
25     
26     
27     return cell;
28 }

显示后的界面如下:

 

技术分享技术分享

为了更好的控制我们实现一个触摸屏幕推出键盘的方法

 1 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 2 { 3 [self.view endEditing:YES]; 4 } 

 

五:查询数据

为tableView的HeaderView设置一个SearchBar来实现搜索功能,设置Frame,设置代理并且实现它的代理方法

1     UISearchBar *search = [[UISearchBar alloc] init];
2     search.frame = CGRectMake(0, 0, 320, 44);
3     search.delegate = self;
4     self.tableView.tableHeaderView = search;

代理方法,(模糊)查询和显示

 1 //Searchbar代理方法
 2 -(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
 3 {
 4     
 5     [self.users removeAllObjects];
 6     
 7     //模糊查询
 8     //查询数据库
 9     
10     //SQL语句
11     NSString *sql = [NSString stringWithFormat:@"SELECT name, age FROM t_user WHERE name LIKE ‘%%%@%%‘ OR age LIKE ‘%%%@%%‘;", searchText, searchText];
12     //执行查询语句
13     sqlite3_stmt *stmt = NULL;
14     int status = sqlite3_prepare_v2(self.db, sql.UTF8String, -1, &stmt, NULL);
15     if (status == SQLITE_OK) {
16         //查询数据成功
17         while (sqlite3_step(stmt) == SQLITE_ROW) { //使用while一条一条的执行
18             const char *name = (const char *)sqlite3_column_text(stmt, 0);
19             const char *age = (const char *)sqlite3_column_text(stmt, 1);
20             
21             NSLog(@"Select %s, %s", name, age);
22             
23             
24             Users *user = [[Users alloc] init];
25             user.name = [NSString stringWithUTF8String:name];
26             user.age = [NSString stringWithUTF8String:age];
27             
28             [self.users addObject:user];
29             
30         }
31     }
32     [self.tableView reloadData];
33 }

上面通过所有直接模糊查询的,你也可以查询所有的数据

 1 /**     查询数据库     */
 2 -(void)selectDB
 3 {
 4     //查询数据库
 5     
 6     //SQL语句
 7     const char *sql = "SELECT name, age FROM t_user;";
 8     //执行查询语句
 9     sqlite3_stmt *stmt = NULL;
10      int status = sqlite3_prepare_v2(self.db, sql, -1, &stmt, NULL);
11     if (status == SQLITE_OK) {
12         //查询数据成功
13         while (sqlite3_step(stmt) == SQLITE_ROW) { //使用while一条一条的执行
14             const char *name = (const char *)sqlite3_column_text(stmt, 0);
15             const char *age = (const char *)sqlite3_column_text(stmt, 1);
16             
17             NSLog(@"Select %s, %s", name, age);
18             
19             
20             Users *user = [[Users alloc] init];
21             user.name = [NSString stringWithUTF8String:name];
22             user.age = [NSString stringWithUTF8String:age];
23            
24             [self.users addObject:user];
25             
26         }
27     }
28 }

shixan查询之后的显示界面

技术分享技术分享

 

注:上面只是实现了数据库的打开,创建,增加,查询,并没有处理删除,这里说一下思路,关于删除你可能是删除数据库也可能只是删除tableView上面显示的数据,但是这样的话数据库的数据还是存在。

希望本文能够对你有益,有错误的地方也希望能指正,

最后附上上面源码的下载地址:http://d.cocoachina.com/code/detail/307648/%E6%95%B0%E6%8D%AE%E5%BA%93SQLITE%E7%9A%84%E5%BA%94%E7%94%A8/

后面将会结束一个操作数据库的很有名的框架——FMDB

 

 

 
 

ios开发——实战OC篇&SQLite3的实际应用

标签:

原文地址:http://www.cnblogs.com/iCocos/p/4592070.html

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