iOS开发之数据库的简单使用

数据库基础知识:

  plist:writetoFile,条件:只有一个对象拥有这个方法,才能使用plist存储,而且自定义对象不能用plist存储
 Preference:偏好设置存储:NSUserDefault存储,好处:不需要关心文件名,快速存储,底层:就是用一个字典做存储.坏处:在iOS8之前,都必须做一下同步操作,目的让内存和硬盘同步.
 NSCoding(NSKeyedArchiver\NSkeyedUnarchiver):用来自定义对象归档,自定义对象需要归档:遵守NSCoding协议,并且实现对应的方法,告诉系统哪些属性需要归档,哪些属性需要解档
 
 SQLite3:好处:1.精确的读取数据2.快速的查询到自己想要的数据3.可以批量的读取数据(可以只读出一部分数据)
        利用场合:1.用来做离线缓存(只读出需要展示数据,可以节省流量)

 本地存储:都是以文件形式存储.
 数据库:是以文件的形式存在
 数据库第一步:创建数据库文件
      第二步:创建表 -> 定义一个模型类
      第三步:设计字段(这个表里面有哪些属性) -> 设计模型属性(主要是看你想存储哪些属性)
            注意:一定需要一个主键,每条记录的唯一标识,自动增长
      第四步:添加记录(设置每个属性的值) -> 创建模型,并且给模型赋值
 
 1.创建数据库链接,就等于创建数据库文件
 
 sql语句
 DDL语句:创建表格和删除表格
 1.创建表格 create table if not exists 表名(字段名 字段类型,...);
 create table t_student (id integer primary key,name text,age integer);
 判断下有没有这个表格
 create table if not exists t_student (id integer primary key,name text,age integer);
 2.删除表格 drop table if exists 表名;
 drop table if exists t_student;
 DML:增,删,改:操作的是记录
 增 insert into 表名 (字段,...) values(字段值);
 如果是字段是字符串类型,必须要用单引号(')扩住
 insert into t_student (name,age) values ('a',10);
 
 改 update 表名 set 字段 = 字段值,....
 update t_student set name = 'c',age = 18;
 删:会把t_student表里面的所有记录全部删掉
 delete from t_student;
 
 删 delete from 表名;把表里面的所有记录全部删除.
 
3. 条件语句
 update t_student set age = 9 where age =1 and name = '左泽';
 
4.查询语句(DQL) select 字段 from 表名;
 select s.name t_name from t_student s where age = 1 and name = '小泽';
 
 
 模糊查询
 %:代表所有的值
 %3:前面无论是什么值,只要以3结尾就OK
 3%:后面无论是什么值,只要以3就Ok
 %3%:无论前面后面是什么,可以有值也可以没有值,只要有3就行
 113:

第一步:创建数据库文件

1、导入sqlite3框架

2、导入头文件

3、创建数据库文件

 1 NSString *docPatch = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES)[0];
 2     NSString *filePatch = [docPatch stringByAppendingPathComponent:@"student.splite"];
 3     /**
 4      *  打开数据库
 5      *
 6      *  @param filename
 7      *  @param ppDb
 8      *
 9      *  @return 是否打开成功,只要打开成功,就会自动创建数据库文件,文件名就是filename,还有会给数据库实例赋值
10      */
11     // sqlite3_open(<#const char *filename#>, <#sqlite3 **ppDb#>)
12     // 把OC中字符串转换成c语言字符串 -> NSUTF8String
13     sqlite3 *db;
14     if (sqlite3_open(filePatch.UTF8String, &db)) {
15         NSLog(@"打开成功");
16     }else{
17         NSLog(@"打开失败");
18     }

二、创建表格语句

 1 // 创建表格
 2         /**
 3          *  执行数据库语句
 4          *
 5          *  @param sqlite3       数据库实例
 6          *  @param sql       sql语句
 7          *  @param callback 执行完成的回调
 8              void * 回调的第一个参数
 9                 errmsg 错误信息
10          *
11          *  @return 如果执行成功会返回
12          */
13         // sqlite3_exec(sqlite3 *, const char *sql, int (*callback)(void *, int, char **, char **), void *, char **errmsg);
14         char *errmsg;
15         NSString *sql = @"crate table if not exists t_student (id integer primary key, name text not null);";
16         // 创建表格
17 
18         sqlite3 *db;
       sqlite3_exec(db, sql.UTF8String, NULL, NULL, &errmsg); 19 if(errmsg){ 20 NSLog(@"创建表格失败"); 21 } else { 22 NSLog(@"创建表格成功"); 23 }

三、增-插入(增加)数据的语句

char *errmsg;
    
    NSString *sql = [NSString stringWithFormat:@"insert into t_student (name) values('abc');"];

    // 创建表格
    sqlite3 *db;
    sqlite3_exec(db, sql.UTF8String, NULL, NULL, &errmsg);
    
    if (errmsg) {
        NSLog(@"插入失败");
    }else{
        NSLog(@"插入成功");
    }

四、删-删除表格语句

char *errmsg;
    NSString *sql = [NSString stringWithFormat:@"delete from t_student;"];
    
    // 创建表格
  sqlite3 *db;
  sqlite3_exec(db, sql.UTF8String, NULL, NULL, &errmsg); if (errmsg) { NSLog(@"删除失败"); }else{ NSLog(@"删除成功"); }

五、改-改掉表格中某个字段的语句

char *errmsg;
    NSString *sql = [NSString stringWithFormat: @"update t_student set name = 'b';"];
    // 创建表格
sqlite3 *db;    
sqlite3_exec(db, sql.UTF8String, NULL, NULL, &errmsg); if (errmsg) { NSLog(@"更新失败"); }else{ NSLog(@"更新成功"); }

六、 查- 查找数据的语句

查询跟增删改不一样,查询之前得先有一个准备,先看下查询语句的C语言函数

 1 // 查询跟增删改不一样
 2     
 3     // 1.让数据准备一下
 4     /**
 5      *
 6      *
 7      *  db:数据实例
 8      *  zSql:查询的准备语句
 9      int nByte 查询语句的字节 -1->就会自动计算字节
10      ppStmt:句柄:操作数据库里面的记录
11      返回值 准备成功就返回 SQLITE_OK , 失败返回 SQLITE_FAIL
12      */
13     sqlite3_prepare_v2(sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **ppStmt, const char **pzTail)

查询语句代码实例

 1 sqlite3_stmt *stmt;
 2     sqlite3 *db;
 3     NSString *sql = [NSString stringWithFormat:@"select * from t_student;"];
 4     if (sqlite3_prepare_v2(db, sql.UTF8String, -1, &stmt, NULL) == SQLITE_OK) {
 5         NSLog(@"准备成功");
 6         // 执行句柄,去寻找下一条记录
 7         while (sqlite3_step(stmt) == SQLITE_ROW) {
 8             NSLog(@"找到数据");
 9             // 获取哪一列的数据
10             const unsigned char *name =  sqlite3_column_text(stmt, 1);
11             Student *s = [[Student alloc] init];
12             s.name = [NSString stringWithUTF8String:(const char *)name];
13             [arrM addObject:s];
14         }
15         
16         
17     }

 

 
 

posted on 2014-12-15 00:32  半个童钱  阅读(270)  评论(0编辑  收藏  举报

导航