iOS小明开发笔记(一) (数据存储篇之sqlite3的基本使用)

来源:互联网 发布:多宝视训练软件价格 编辑:程序博客网 时间:2024/04/30 19:20

一.数据存储的方式:

1.plist: NSArray,NSString,NSDictionaryOC对象的存储)存储少量数据。

2.Preference: (偏好设置/NSUserDefaults存储一些软件设置,记住密码,自动登录等,存储少量数据。

3.归档NSKeyedArchiverNSKeyedUnarchiver)也是存储中小量数据  例如我们要归档缓存一些数据,归档文件时是归档全部的文件,读取文件的时候也是一口气读取全部的数据,如果数据量过大,内存直接爆满(不可取),当要更新数据的时候,也是重新全部归档,覆盖原有的文件,可操作性不好

4.SQLite3:数据库能够存储大批量的数据,优点如下

 >.是一款轻型(轻量级,占用内存小)的嵌入式(嵌入在移动设备上(手机,ipad,不是服务器)数据库

  >.运行速度快

  >.建议使用工具  Navicat工具 数据库管理软件,支持大部分数据库管理软件,能够实时查看数据库中的表,字段,纪录等,能更好的理解数据库的操作(自己下载)

   >.学前必备:懂得基本的数据库DDL,DML等基本使用语句,创建表,表的CRUD(增删改查,装B),本文不做介绍

5.CoreData:SQLite3的封装 (后续写入使用说明)

6. sqlite语句

 1>创建表
CREATE TABLE IF NOT EXISTS UserTable 
(
username TEXT NOT NULL PRIMARY KEY,
password TEXT NOT NULL,
email TEXT,
age INTEGER
)

2>更改表结构,添加一个字段
ALTER TABLE UserTable ADD address TEXT;

3>删除表
DROP TABLE UserTable;

4>插入一条数据
INSERT INTO UserTable (username, password, email, age) VALUES ("Jack", "123", "jack@qq.com", 23);

5>插入或者根据主键替换一条数据
INSERT OR REPLACE INTO UserTable (username, password, email, age) VALUES ("Jack2", "789", "jack2@qq.com", 31);

6>UPDATE语句
UPDATE UserTable SET password = "root" WHERE username = "Jack"
UPDATE UserTable SET password = "root" WHERE age = 23 OR age = 25
UPDATE UserTable SET password = "root" WHERE age = 23 AND username = "Jack"

7>SELECT语句
SELECT * FROM UserTable;
SELECT username FROM UserTable;
SELECT username, password FROM UserTable WHERE password = "pwd"

// AS取别名,count求个数

SELECT count(username) AS p_count FROM UserTable

// DISTINCT 去除重复
SELECT  DISTINCT(password) FROM UserTable

// COUNT求个数. 查询去除重复的密码的总个数,并且取别名为result
SELECT  COUNT(DISTINCT(password)) "result" FROM UserTable

// 排序ORDER BY. ASC是升序,DESC降序,默认不写就是ASC
SELECT * FROM UserTable ORDER BY age ASC
SELECT * FROM UserTable ORDER BY age DESC

// 模糊查询
SELECT * FROM UserTable WHERE username LIKE  'J%'

8>DELETE语句
DELETE FROM UserTable WHERE username = "Jack"
DELETE FROM UserTable

二.使用sqlite3

  1.创建新项目导入框架



2.工程中包含头文件

#import <sqlite3.h>

3.直接上工程代码

#import "ViewController.h"

#import <sqlite3.h>


@interface ViewController ()

{

    sqlite3 *_db;

}


@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    

    //数据库文件存储的沙盒路径

    NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"t_student.sqlite"];

    NSLog(@"%@",filename);

    // 开启数据库

    // 参数1  文件名,OC字符串转换为c的字符串filename.UTF8String参数2:传入数据库的地址

    int result = sqlite3_open(filename.UTF8String, &_db);

    // 返回的result结果,成功则创建表

    if (result == SQLITE_OK) {

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

        //创建表的sql语句,设置主键,字段,字段格式,autoincrement(主键自动增长) text文本类型(字符串)ingeter(整型)等等

        const char *sql = "create table if not exists t_student (id integer primary key autoincrement, name text, age integer);";

        char *errmsg;

        sqlite3_exec(_db, sql, NULL, NULL, &errmsg);

        if (errmsg == SQLITE_OK) {

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

            [self insertData];

        }else{

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

        }

        

        

    }else{

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

    }

    

    

}

// 插入数据

- (void)insertData

{

    NSLog(@"正在插入数据");

    // 插入30条数据

    for (int i = 0; i<30; i++) {

        NSString *name = [NSString stringWithFormat:@"zth-%d", arc4random()%100];

        // 年龄为随机值

        int age = arc4random()%100;

        NSString *sql = [NSString stringWithFormat:@"insert into t_student (name, age) values('%@', %d);", name, age];

        

        char *errorMesg = NULL;

        int result = sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errorMesg);

        if (result == SQLITE_OK) {

            NSLog(@"成功添加数据");

        } else {

            NSLog(@"添加数据失败:%s", errorMesg);

        }

    }


}

@end



4.根据打印的沙盒路径查看数据库文件


5.打开数据库文件,navicat自动打开,这时候我们可以看到t_student学生表,以及插入的30条数据,



  最后,祝您操作成功,

  特殊补充:实际应用中,肯定不能把代码直接写在控制器中,应该创建学生模型文件,学生管理文件,面向对象开发(自己想咯,这里只提供思路)

  当然,sqlite3的使用特别烦琐,需要懂一些数据库语句,提供个第三方开源框架FMDB,操作相对简单(自己去摸索吧)。

  sqlite3,在性能方面还是非常顶呱呱的,因为底层直接是c语言,相比CoreData(核心数据,苹果自带框架)要好很多,大家都知道,封装起来的东西,用着简单,底层实现原理却不清楚,甚至会自动生成一堆用不到的代码。最后,希望能帮到你们,祝您查看愉快,工作顺利

1 0
原创粉丝点击