SQLite3的实际应用

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

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

一:准备

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

二:环境

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

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

代码如下:

 @property (weak, nonatomic) IBOutlet UITextField *name;
 @property (weak, nonatomic) IBOutlet UITextField *age;
 - (IBAction)Add;

 @property (weak, nonatomic) IBOutlet UITableView *tableView;

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

三:打开-创建数据库

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

#import <sqlite3.h>

创建一个数据库属性:

@property (nonatomic, assign) sqlite3 *db;

数据库打开与创建;

 /**     初始化数据库      */
 -(void)setUpDB
 {
     //数据库文件的路径
     NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"iCocos.sqlite"];

     //打开数据库(链接)
     BOOL sqlOpen = sqlite3_open(path.UTF8String, &_db);
     if (sqlOpen == SQLITE_OK) {
         NSLog(@"打开数据库成功");//NSAssert(YES, @"打开数据成功");

         //创建表格
         //SQL语句
         const char *sql = "CREATE TABLE IF NOT EXISTS t_user (id integer PRIMARY KEY, name text NOT NULL, age real);";
         char *err = NULL;
         //执行创建表格语句
         sqlite3_exec(self.db, sql, NULL, NULL, &err);
         if (err) {
             NSLog(@"创建表格失败 -- %s", err);
         } else {
             NSLog(@"创建表格成功");
         }
     } else {
         NSLog(@"打开失败");
     }

     //sqlite3_close(db);
 }

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

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

四:数据库操作的实现

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

倒入模型

#import "Users.h"

并且在里面定义两个属性

@property (nonatomic, copy) NSString *name;

@property (nonatomic, copy) NSString *age;

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

@property (nonatomic, strong) NSMutableArray *users;

懒加载这个数组

 //懒加载
 -(NSMutableArray *)users
 {
     //如果为空
     if (!_users) {
         self.users = [[NSMutableArray alloc] init];
     }
     return _users;
 }

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

 //插入数据
 - (IBAction)Add {
     //插入数据库
     char *err = NULL;
     //SQL语句
     NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_user (name, age) VALUES ('%@', %f);", self.name.text, self.age.text.doubleValue];
     //执行插入语句
     sqlite3_exec(self.db, sql.UTF8String, NULL, NULL, &err);
     if (err) {
         NSLog(@"插入数据库失败 --- %s", err);
     }

     //初始化模型数据
     Users *user = [[Users alloc] init];
     user.name = self.name.text;
     user.age = self.age.text;

     //将模型数据
     [self.users addObject:user];
     //刷新表格
     [self.tableView reloadData];
 }

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

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 {
     return self.users.count;
 }

 #pragma mark 每当有一个cell进入视野范围内就会调用,返回当前这行显示的cell
 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
     // 0.用static修饰的局部变量,只会初始化一次
     static NSString *ID = @"cell";

     // 1.拿到一个标识先去缓存池中查找对应的Cell
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];

     // 2.如果缓存池中没有,才需要传入一个标识创建新的Cell
     if (cell == nil) {
         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
         cell.backgroundColor = [UIColor lightGrayColor];
     }

     //刷新数据
     Users *user = self.users[indexPath.row];
     cell.textLabel.text = user.name;
     cell.detailTextLabel.text = user.age;

     return cell;
 }

显示后的界面如下:

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

-( }

五:查询数据

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

     UISearchBar *search = [[UISearchBar alloc] init];
     search.frame = CGRectMake(, , , );
     search.delegate = self;
     self.tableView.tableHeaderView = search;

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

 //Searchbar代理方法
 -(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
 {

     [self.users removeAllObjects];

     //模糊查询
     //查询数据库

     //SQL语句
     NSString *sql = [NSString stringWithFormat:@"SELECT name, age FROM t_user WHERE name LIKE '%%%@%%' OR age LIKE '%%%@%%';", searchText, searchText];
     //执行查询语句
     sqlite3_stmt *stmt = NULL;
     , &stmt, NULL);
     if (status == SQLITE_OK) {
         //查询数据成功
         while (sqlite3_step(stmt) == SQLITE_ROW) { //使用while一条一条的执行
             );
             );

             NSLog(@"Select %s, %s", name, age);

             Users *user = [[Users alloc] init];
             user.name = [NSString stringWithUTF8String:name];
             user.age = [NSString stringWithUTF8String:age];

             [self.users addObject:user];

         }
     }
     [self.tableView reloadData];
 }

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

 /**     查询数据库     */
 -(void)selectDB
 {
     //查询数据库

     //SQL语句
     const char *sql = "SELECT name, age FROM t_user;";
     //执行查询语句
     sqlite3_stmt *stmt = NULL;
      , &stmt, NULL);
     if (status == SQLITE_OK) {
         //查询数据成功
         while (sqlite3_step(stmt) == SQLITE_ROW) { //使用while一条一条的执行
             );
             );

             NSLog(@"Select %s, %s", name, age);

             Users *user = [[Users alloc] init];
             user.name = [NSString stringWithUTF8String:name];
             user.age = [NSString stringWithUTF8String:age];

             [self.users addObject:user];

         }
     }
 }

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的实际应用的更多相关文章

  1. iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController)

    iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController)   前面我们介绍了StoryBoard这个新技术,和纯技术 ...

  2. iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController)

    iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController)   这里我们就直接上实例: 一:新建一个项目singleV ...

  3. iOS开发——实战OC篇&环境搭建之StoryBoard(玩转UINavigationController与UITabBarController)

      环境搭建之StoryBoard(玩转UINavigationController与UITabBarController)   研究了这么就IOS开发,都没有所处一个像样或者自己忙一点的项目.最近自 ...

  4. ios开发——实战OC篇&FMDB详解

    FMDB详解 前一篇文章中我们介绍的SQLite的使用,在iOS中原生的SQLite API在使用上相当不友好. 于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.Plausibl ...

  5. iOS开发——控制器OC篇&UINavigationController&UITabBarController详解

    UINavigationController&UITabBarController详解 一:UINavigationController 控制器的属性: UINavigationControl ...

  6. iOS开发——实用技术OC篇&单例模式的实实现(ACR&MRC)

    单例模式的实实现(ACR&MRC) 在iOS开发中单例模式是一种非常常见的模式,虽然我们自己实现的比较少,但是,系统却提供了不少的到来模式给我们用,比如最常见的UIApplication,No ...

  7. iOS开发——图层OC篇&UIColor深入研究(CGColor,CIColor)

    UIColor深入研究(CGColor,CIColor) 由于跟人比较喜欢研究关于图层与动画方面的技术,正打算看看别人写的好东西,就遇到了好几个问题, 第一:UIClor类方法的使用 就是关于UICo ...

  8. iOS开发——多线程OC篇&多线程详解

    多线程详解 前面介绍了多线程的各种方式及其使用,这里补一点关于多线程的概念及相关技巧与使用,相信前面不懂的地方看了这里之后你就对多线程基本上没有什么问题了! 1——首先ios开发多线程中必须了解的概念 ...

  9. iOS开发——多线程OC篇&多线程总结

    多线程总结 //1.NSThread /** 优点:NSThread 比其他两个轻量级. 缺点:需要自己管理线程的生命周期,线程同步,线程同步时对数据的加锁会有一定的系统开销. cocoa给我提供了两 ...

随机推荐

  1. ehcache 分布式集群同步数据实例

    本文使用rmi方式,借鉴百度能搜到的文章,但是均不能做到数据同步,做了些改动完全没问题,更详细说明介绍百度即可.直奔主题,可运行的demo实例! 创建一个maven项目,配置pom pom.xml & ...

  2. 分布式存储Memcache替代Session方案

    PHP自带的Session实际是在服务器中为每个客户建立独立的文件存放各自的信息. 在不做处理的情况下,很容易被客户端伪造.并且由于采用文件形式,所以存在着IO 读写的瓶颈.一般当用户在线达到1000 ...

  3. Java [leetcode 33]Search in Rotated Sorted Array

    题目描述: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 ...

  4. [selenium webdriver Java]常用api

    1. 获取元素文本 WebElement类的getText()方法返回元素的innerText属性.所以元素里如果有子节点一样也会被返回出来.如下所示 public class GetText { @ ...

  5. 环境监测小助手V1.1的Windows版

    环境监测小助手V1.1——可以实时查看空气质量和城市排名 一款跨平台空气质量监测软件 数据来源互联网,请联网使用. 暂不支持效果预览. 下载地址:http://files.cnblogs.com/py ...

  6. JDK1.5新特性(五)……Typesafe Enums

    援引 Typesafe Enums - This flexible object-oriented enumerated type facility allows you to create enum ...

  7. hadoop面试题答案

    Hadoop 面试题,看看书找答案,看看你能答对多少(2) 1. 下面哪个程序负责 HDFS 数据存储.a)NameNode  b)Jobtracker  c)Datanode d)secondary ...

  8. HW5.28

    public class Solution { public static void main(String[] args) { System.out.printf("%s\t%s\n&qu ...

  9. ubuntukylin提取root权限及mongoDB部署

    UbuntuKylin下安装Mongodb (参照UbuntuKylin下安装Mongodb一文安装成功后的心得) 1.官网下载安装包  http://www.mongodb.org/dr/fastd ...

  10. linux磁盘简单分区方式

    1:分区 fdisk /dev/sdb 2:格式化 mkfs -t ext3  /dev/sdb1 或者 mke2fs -t ext4  /dev/sdb2 3:挂载 mount /dev/sdb1 ...