iOS应用数据存储2

时间:2021-12-31 08:57:39

      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前面的勾勾上,然后就会发现,真的好了!