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

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

上一篇:python征程3.1(列表,迭代,函数,dic,set,的简单应用)


下一篇:manifest中读取