• iOS应用数据存储2SQLite3数据库


          SQLite3

    1. SQLite3是一款开源的嵌入式关系型数据库,可移植性好,易使用,内存开销小.
    2. SQLite3是无类型的,意味着你可以保存任何类型的数据到任意表的任意字段中.
    3. SQLite3常用的4种数据类型:text(文本字符串), integer(整型值), real(浮点值),  blob(二进制数据(比如文件)).
    4. 在iOS中使用SQLite3,首先要添加库文件'libsqlite3.dylib'和导入主头文件#import<sqlite3.h>

    SQL语句的特点:

        1> 不区分大小写;

        2> 每条语句都必须以分号;结尾

    SQL中常用的关键字:

        pselect、insert、update、delete、from、create、where、desc、order、by、group、table、alter、view、index等等

        数据库中不可以使用关键字来命名表,字段.

    数据库的使用:

    1. 创建数据库:
        1. sqlite3_open()打开数据库
        2. sqlite3_exec()创建数据库表(每个表都有表名,一个数据库可以有多个表)
        3. sqlite3_close()释放资源
    2. 查询数据:
    1. sqlite3_open() 打开数据库
    2. sqlite3_prepare_v2() 预处理SQL语句
    3. sqlite3_bind_text() 绑定参数
    4. sqlite3_step()执行SQL查询语句,遍历结果
    5. sqlite3_column_text()提取字段数据
    6. sqlite3_finalize()sqlite3_close()释放资源
    1. 修改数据
    1. sqlite3_open() 打开数据库
    2. sqlite3_prepare_v2() 预处理SQL语句
    3. sqlite3_bind_text() 绑定参数
    4. sqlite3_step()执行SQL查询语句,遍历结果
    5. sqlite3_finalize()sqlite3_close()释放资源

    SQL语句种类:

        1> 数据创建语句

        包括create和drop等操作 ;

        在数据库中创建新表或删除表(create table或 drop table).

    创表: 

        create table if not exists database(id integer, name text, age inetger, score real) ;

    删表:

        drop table if exists database;

        2> 数据操作语句(DML:Data Manipulation Language) 

        包括insert、update、delete等操作 ;

        上面的3种操作分别用于添加、修改、删除表中的数据 .

    • 插入数据(insert):

        insert into database (name, age) values ('JN', 22) ;

        注意:数据库中的字符串内容应该用单引号''括住.

    • 更新数据(updata):

        update database set name = 'jack', age = 20 ;     

        注意:上面的更新会将database表中所有记录的name都改为jack,age都改为20;

    update database set name = ?, age = ? ;  

    ?表示占位符,要改变的参数   

    • 删除数据(delete):

        delete from database;

        会将database表中所有记录都删掉.

        如果只想更新或者删除某些固定的记录,那就必须在语句后加上一些条件.示例如下:

     // 将database表中年龄大于10 并且 姓名不等于jack的记录,年龄都改为 5 

     update t_student set age = 5 where age > 10 and name != ‘jack’ ; 

     // 删除database表中年龄小于等于10 或者 年龄大于30的记录 

     delete from database where age <= 10 or age > 30 ;

        3> 数据查询语句(DQL:Data Query Language)

        可以用于查询获得表中的数据 ;

        关键字select是DQL(也是所有SQL)用得最多的操作 ;

        其他DQL常用的关键字有where,order by,group by和having创建.

    查询语句(DQL):

       //  条件查询条件语句: 

    select * from  database where age > 10 

    //查询所有数据:

    Select name, age from database

    主键约束:

        每张表都必须有一个主键,用来标识记录的唯一性.

    什么是主键:

        主键(Primary Key,简称PK),用来唯一的标识某一条记录.

        例如database可以增加一个id字段作为主键,相当于人的身份证.

        主键可以是一个字段或多个字段.

    外键约束:

        利用外键约束可以来建立表与表之间的联系.

        外键的一般情况是:一张表的某个字段引用着另一张表的主键字段.

    获取数据库方式:

    1. 自己建立数据库

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"database.sqlite"];  

    1. 访问本地写好的数据库

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

        NSError *error;  

    // 将放在项目目录中的数据库复制到沙盒中

       NSBundle *bundle = [NSBundle mainBundle];  

        NSString *filenameAgo = [bundle pathForResource:@" database " ofType:@" sqlite "];  

        NSFileManager *fileManager = [NSFileManager defaultManager];  

        [fileManager copyItemAtPath:filenameAgo toPath:filename error:&error];

    解决路径为空的解决方法:

    [NSPlaceholderString initWithUTF8String:]: NULL cString 

    1. 在拖入db文件到工程时,苹果默认把add Target前面的勾给去掉了!!!导致无论如何也找不到我们导入的db文件,so,解决方法就是:

    把db文件从工程中删除,然后重新拖进去,当弹出窗口时,别着急着看都没看就点next,把add Target前面的勾勾上,然后就会发现,真的好了!

  • 相关阅读:
    uva 10099(最大生成树+搜索)
    Codeforces Round #218 (Div. 2) 解题报告
    CodeChef December Challenge 2013 解题报告
    Codeforces Round #217 (Div. 2) 解题报告
    uva 1423 (拓扑排序)
    UESTC 1307 windy数(数位DP)
    Codeforces Round #216 (Div. 2) 解题报告
    Codeforces Round #215 (Div. 2) 解题报告
    uva 10047(BFS)
    uva 10369(最小生成树)
  • 原文地址:https://www.cnblogs.com/bzhong/p/5947188.html
Copyright © 2020-2023  润新知