iOS数据持久化-sqlite3

1、概述


sqlite是个开源嵌入式关系数据库,SQLite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程.sqlite不是覆盖存储,不像其他持久化操作,需要把整个文件读取出来,然后修改数据后把整个内容写入文件,所以他们都不适合存储大量数据。

.字段类型
    表面上SQLite将数据分为以下几种类型:

    integer:整数

    real:实数(浮点数)

   text:文本字符串

   blob:二进制数据,比如文件,图片之类的。
  sqlite数据类型,只是一种数据类型的规范,实际上是无类型的,不指定数据类型依旧可以存储数据,创建表时也可以不用指定类型,不管为了规范都建议设置正确的数据类型,主键的话必须设置为integer类型。

2、操作数据库

1、打开数据库指定数据库文件,指定或者创建一张表

-(void)openDatabase{
//   1.设置文件名
   NSString *dbFile = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)firstObject stringByAppendingPathComponet:@"user.db"];
//2.打开数据库文件,
    NSString *dbFile = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"user.db"];
//    2.打开数据库文件,如果没有就会自己创建一个表
NSInteger result = sqlite3_open(dbFile.UTF8String,&sqlite);
  if(result = SQLITE_OK){
   NSLog(@"打开成功");
   //3.创建数据库表,使用sqlite3_exec()方法可以执行任何SQL语句,比如创表,更新,插入和删除操作。但是一般不用它执行查询语句,因为它不会返回查询到的数据。
  char &error = NULL;
  sqlite3_exec(sqlite,"CREATE TABLE IF NOT EXISTS t_user(id integer primary key autoincrement,name text ,age integer)",NULL,NULL,&error);
if(error){
  NSLog(@"create error %S",error);
}
}else {
    NSLog("打开失败");
}
}

3、执行指令
使用sqlite_exec()方法执行除查询以外的其他数据库操作
 如插入数据:
-(void)insertData{
NSString *name=@"zhangsan";
NSInteger age = 19;
<span style="font-family: 'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif; line-height: 25.2px;">     NSString *sql=[NSString stringWithFormat:@"INSERT INTO t_user (name,age) VALUES('%@',"%ld"),name,age";</span>
<span style="font-family: 'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif; line-height: 25.2px;">   char  *error  =NULL
   sqlite_exec(sqlite,sql.UTF8String,NULL,NULL,&error);</span>
<span style="font-family: 'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif; line-height: 25.2px;">if (error){</span>
<span style="font-family: 'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif; line-height: 25.2px;">   NSLog(@"erorr");</span>
<span style="font-family: 'Helvetica Neue', Helvetica, STheiti, 微软雅黑, 黑体, Arial, Tahoma, sans-serif, serif; line-height: 25.2px;">}</span>
}
}
查询指令
查询需要几条语句配合使用sqlite3_prepare_v2检查sql合法性,sqlite3_step()逐行获取查询结果,不断重复,知道最后一条记录
sqlite3_colum_xxx();获取对应字段类容,参数0,smtp,参数1 代表sql语句中字段的顺序。sqlite3_finalize()释放stmt
例:从表中读取数据到数组中:
  -(void)selectData{
    NSMutableArray *mArray = [NSMutableArray arrayWithCapacity:1000];
    char *sql = "select name,age from t_user;";
    sqlite3_stmt *stmt;
NSInteger result = sqlite3_prepare_v2(sqlite,sql,-1,&stmt,NULL);
 if(result =SQLITE_OK){
    while(sqlite3_step(stmt)==SQLITE_ROW){
     char *name = sqlite3_column_int(stmt,1);
    Person *person = [Person personWithName:[NSString stringWithUTF8String:name]Age:age];
    [mArray addObject:person];
}
sqlite3_finalize(stmt);
}
}
总的来说在操作sqlite来说,这种方法比较麻烦都是c语言的一些函数的调用,可以通过第三方开源api进行调用,这样比较方便,也可以使用系统提供的Core Data ,第三方的话推荐使用fmdb来操作数据库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

house.zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值