详解iOS的数据存储

2020-01-15 17:38:27于海丽

代码解析:

sqlite3_exec()可以执行任何SQL语句,比如创表, 更新, 插入和删除操作.但是一般不用它执行查询语句,因为它不会返回查询到得数据.

sqlite3_exec()还可以执行的语句:

1> 开启事务:begain transaction;

2> 回滚事务:rollback

3> 提交事务:commit

SQLite函数总结:


1.打开数据库
int sqlite3_open(  
const char *filename,  // 数据库的文件路径  
sqlite3 **ppDb     // 数据库实例
);
2.执行任何SQL语句
int sqlite3_exec(  
sqlite3*,        // 一个打开的数据库实例  
const char *sql,              // 需要执行的SQL语句  
int (*callback)(void*,int,char**,char**), // SQL语句执行完毕后的回调  
void *,                  // 回调函数的第1个参数  
char **errmsg               // 错误信息
);
3.检查SQL语句的合法性(查询前的准备)
int sqlite3_prepare_v2(
  sqlite3 *db,      // 数据库实例  
const char *zSql,    // 需要检查的SQL语句  
int nByte,       // SQL语句的最大字节长度  
sqlite3_stmt **ppStmt, // sqlite3_stmt实例,用来获得数据库数据  
const char **pzTail
);
4.查询一行数据
int sqlite3_step(
sqlite3_stmt*); // 如果查询到一行数据,就会返回SQLITE_ROW
5.利用stmt获得某一字段的值(字段的下标从0开始)
double sqlite3_column_double(sqlite3_stmt*, int iCol); // 浮点数据
int sqlite3_column_int(sqlite3_stmt*, int iCol); // 整型数据
sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol); // 长整型数据
const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); // 二进制文本数据
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol); // 字符串数据

CoreData

Core Data框架提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite3数据库文件中,也能将保存在数据库中的数据还原成OC对象.在次数据操作期间,不需要编写任何SQL语句.

使用此功能,要添加CoreData.framework和导入主头文件<CoreDate/CoreData.h>.

模型文件:在CoreData中,需要进行映射的对象称为实体(entity),而且需要使用CoreData的模型文件来描述应用的所有实体和实体属性.

NSManagedObject

通过Core Data从数据库中取出的对象,默认情况下都是NSManagedObject对象.

    NSManagedObject的工作模式有点类似于NSDictionary对象,通过键-值对来存取所有的实体属性.

    setValue:forkey:存储属性值(属性名为key);

    valueForKey:获取属性值(属性名为key).

CoreData主要对象

NSManagedObjectContext:负责数据和应用库之间的交互(CRUD);

  NSPersistentStoreCoordinator:添加持久化存储库(比如SQLite数据库);

  NSManagedObjectModel:代表Core Data的模型文件;

  NSEntityDescription:用来描述实体;