zoukankan      html  css  js  c++  java
  • iOS-SQLite

    前言

    iOS中的数据存储方式

    •  Plist(NSArrayNSDictionary)
    •  Preference(偏好设置NSUserDefaults)

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

    •  NSCoding(NSKeyedArchiverNSkeyedUnarchiver)
    •  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. 用于在多线程中执行多个查询或更新,它是线程安全的
     
    喜欢请赞赏一下啦^_^

    微信赞赏

    支付宝赞赏

  • 相关阅读:
    pytest简介
    python @property的用法及含义全面解析
    python的各种推导式(列表推导式、字典推导式、集合推导式)
    python--random库基本介绍
    整理一下python中with的用法
    Python之路:进程、线程
    Python代码风格的良好养成
    Ubuntu 部署Python开发环境
    Python面向对象编程
    Python文件操作
  • 原文地址:https://www.cnblogs.com/share-iOS/p/7538483.html
Copyright © 2011-2022 走看看