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

SQLite-iOS

时间:2017-09-18 00:28:18      阅读:280      评论:0      收藏:0      [点我收藏+]

标签:删除   div   区分   name   大小   user   plist   lan   如何   

前言

iOS中的数据存储方式

  •  Plist(NSArray\NSDictionary)
  •  Preference(偏好设置\NSUserDefaults)

    http://www.jianshu.com/p/459c15cf6ce2

  •  NSCoding(NSKeyedArchiver\NSkeyedUnarchiver)
  •  SQLite3
  •  Core Data(C语言操作的基础上增添面向对象,重量级)

1. SQLite

  • 什么是SQLite
  1. SQLite是一款轻型的嵌入式数据库
  2. 它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了
  3. 它的处理速度比Mysql、PostgreSQL这两款著名的数据库都还快
 
  • 什么是数据库
  1. 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库
  2. 数据库可以分为2大种类
  3. 关系型数据库(主流)
  4. 对象型数据库
 
  • 常用关系型数据库
  1. PC端:Oracle、MySQL、SQL Server、Access、DB2、Sybase
  2. 嵌入式\移动客户端:SQLite

 

  • 如何在程序运行过程中操作数据库中的数据
  1. 那得先学会使用SQL语句

 

  • 什么是SQL
  1. SQL(structured query language):结构化查询语言
  2. SQL是一种对关系型数据库中的数据进行定义和操作的语言
  3. SQL语言简洁,语法简单,好学好用
 
  • 什么是SQL语句
  1. 使用SQL语言编写出来的句子\代码,就是SQL语句
  2. 在程序运行过程中,要想操作(增删改查,CRUD)数据库中的数据,必须使用SQL语句

 

  • SQL语句的特点
  1. 不区分大小写(比如数据库认为user和UsEr是一样的)
  2. 每条语句都必须以分号 ; 结尾
 
  • SQL中的常用关键字有
  1. select、insert、update、delete、from、create、where、desc、order、by、group、table、alter、view、index等等
  2. 数据库中不可以使用关键字来命名表、字段
  • SQLite的种类
  • 数据定义语句(DDL:Data Definition Language)
  1. 包括create和drop等操作
  2. 在数据库中创建新表或删除表(create table或 drop table)
 
  • 数据操作语句(DML:Data Manipulation Language)
  1. 包括insert、update、delete等操作
  2. 上面的3种操作分别用于添加、修改、删除表中的数据
 
  • 数据查询语句(DQL:Data Query Language)
  1. 可以用于查询获得表中的数据
  2. 关键字select是DQL(也是所有SQL)用得最多的操作
  3. 其他DQL常用的关键字有where,order by,group by和having

2 Navicat

  • Navicat是一款著名的数据库管理软件,支持大部分主流数据库(包括SQLite)
  • 利用Navicat建立数据库连接
  • 建表
  • 查看DDL
  • 执行SQL语句

3. SQLite编码 (增、删、改、查)

  • 基本步骤
  1. 创建数据库文件
  2. 创建表
  3. 添加字段
  4. 添加记录
  • 说明
  1. 获取沙盒路径

 

NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

NSString *dbPath = [docPath stringByAppendingPathComponent:@"student.sqlite"];

 

  2.定义数据库

  只要调用sqlite3_open方法,系统就回自动去指定的路径加载sqlite文件,如果文件不存在就会自动创建数据库文件,并且打开数据库。如果数据库文件存在就会自动打开fileName:数据库文件的地址ppDb:已经打开的数据库

      3. 打开数据库

   int success = sqlite3_open(dbPath.UTF8String, &_db); ///&self.db  &[self db]  错误写法

      if (success == SQLITE_OK) {

          NSLog(@"数据库打开成功");

          //创建表

          /*

           需要执行SQL语句的数据库对象

           需要执行的SQL语句

           执行成功的回掉

           回调函数的参数

           错误信息

           */

          char *error;

          NSString *sql = @"CREATE TABLE IF NOT EXISTS t_student(id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,score REAL DEFAULT 0)";

          /*不允许多线程同时操作,多个程序不能同时操作同一个数据库*/

          success = sqlite3_exec(self.db, sql.UTF8String, NULL, NULL, &error);

          if (success == SQLITE_OK) {

              NSLog(@"创建表成功");

          }

          else {

              NSLog(@"创建表失败");

          }

      }

      else {

          NSLog(@"数据打开失败");

    }

  4. 插入

  

NSString *sql = @"INSERT INTO t_student(score,name) VALUES(100,‘tt‘);";

    char *error;

    int success = sqlite3_exec(self.db, sql.UTF8String, NULL, NULL, &error);

    if (success == SQLITE_OK) {

        

        NSLog(@"插入成功");

    }

    else {

        

        NSLog(@"插入失败");

    }

  5. 查询

 //1. 准备查询

    /*

     需要查询的数据库

     需要执行的查询语句

     查询语句的长度,如果传递一个小于0的数系统会自动计算查询语句的长度

     结果集对象

     */

    sqlite3_stmt *stmt;

    NSString *sql = @"SELECT * FROM t_student;";

    

    int success = sqlite3_prepare_v2(self.db, sql.UTF8String, -1, &stmt, NULL);

    if (success == SQLITE_OK) {

        

        //2.取出查询的数据

//        int row = sqlite3_step(stmt);  //每次调用该方法都会跳到下一条记录

//        if (sqlite3_step(stmt) == SQLITE_ROW)

        while (sqlite3_step(stmt) == SQLITE_ROW) {

            NSLog(@"有数据");

            const unsigned char *name = sqlite3_column_text(stmt, 1);

            double score = sqlite3_column_double(stmt, 2);

            NSLog(@"%s,%.f",name,score);   

        }

    }

  6. 工具类封装

 

     

4. FMDB

  • 什么是FMDB
  1. FMDB是iOS平台的SQLite数据库框架
  2. FMDB以OC的方式封装了SQLite的C语言API
 
  • FMDB的优点
  1. 使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码
  2. 对比苹果自带的Core Data框架,更加轻量级和灵活
  3. 提供了多线程安全的数据库操作方法,有效地防止数据混乱
 
  • nFMDB的github地址
  1. https://github.com/ccgus/fmdb

 

  • FMDB有三个主要的类
  1. FMDatabase
  2. 一个FMDatabase对象就代表一个单独的SQLite数据库
  3. 用来执行SQL语句
 
  • FMResultSet
  1. 使用FMDatabase执行查询后的结果集
 
  • FMDatabaseQueue
  1. 用于在多线程中执行多个查询或更新,它是线程安全的
 

 

SQLite-iOS

标签:删除   div   区分   name   大小   user   plist   lan   如何   

原文地址:http://www.cnblogs.com/share-iOS/p/7538483.html

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