首页 > 代码库 > iOS开发之数据库的简单使用

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语言字符串 -> NSUTF8String13     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_FAIL12      */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     }

 

 
 

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