数据存储_ SQLite(3)

SQLite的应用

一、简单说明

  1、在iOS中使用SQLite3,首先要添加库文件

libsqlite3.dylib

     2、导入主头文件  

#import <sqlite3.h>

二、具体说明

1.sqlite3_open

(1)作用:把一个文件名称传递给他,它会自动检测这个文件是否存在,如果不存在的话,会自动创建相应的文件(这里为数据库文件,刚创建为空)。

(2)参数:它的第一个参数为文件的名称(需转换为C语言的),第二个参数是数据库的实例,sqlite3 *db;

    说明:sqlite3是一种类型,db是数据库的句柄,就是数据库的象征,如果要进行增删改查,就得操作db这个实例。

(3)返回值:它的返回值为int型的,根据函数的返回值可以知道,打开数据库文件是成功还是失败,如果返回值是SQLITE_OK则说明成功,否则为失败。

2.打开数据库

-(void)openDB{

    sqlite3 *db;//db数据库的句柄,数据库的象征,要想增删改查就要操作这个实例

    //获得数据库文件的路径

    NSString*doc=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

    NSString*fileNameOC=[doc stringByAppendingString:@"yoowei.sqlite"];

    //将OC的字符串转换成C字符串

    const char *fileNameC=fileNameOC.UTF8String;

    //打开数据库文件(如果不存在,该函数会自动创建)

    int result=sqlite3_open(fileNameC, &db);

    if (result==SQLITE_OK){

        //打开数据库成功

    }else{

         //打开数据库失败

    }

}

3.创建表

 

  参数:第一个参数为数据库的句柄(db),第二个参数为sql语句,第三个参数为回调参数,是一个指向函数的指针,如果把callback前面的*改成^则就是一个block代码段,第四个参数可以写NULL,第五个参数为错误信息,用以代码调试。

//创建数据库

-(void)openDB{

    sqlite3 *db;//db数据库的句柄,数据库的象征,要想增删改查就要操作这个实例

    //获得数据库文件的路径

    NSString*doc=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

    NSString*fileNameOC=[doc stringByAppendingString:@"yoowei.sqlite"];

    //将OC的字符串转换成C字符串

    const char *fileNameC=fileNameOC.UTF8String;

    //打开数据库文件(如果不存在,该函数会自动创建)

    int result=sqlite3_open(fileNameC, &db);

    if (result==SQLITE_OK){

        //打开数据库成功

        //创建表

        const char  *sql="CREATE TABLE IF NOT EXISTS t_students (id integer PRIMARY KEY AUTOINCREMENT,name text NOT NULL,age integer NOT NULL);";

        char *errmsg=NULL;

        int resultCreat = sqlite3_exec(db, sql, NULL, NULL, &errmsg);

          if (resultCreat==SQLITE_OK) {

               NSLog(@"创表成功");

          }else{

               NSLog(@"创表失败----%s",errmsg);

               printf("创表失败---%s----%s---%d",errmsg,__FILE__,__LINE__);

               }

    }else{

         //打开数据库失败

    }

}

 调试技巧:

  __FILE__宏打印文件名,

  __LINE__宏打印行号。

 

4.插入数据

- (void)insert {

   for (int i=0; i<20; i++) {

     //1.拼接SQL语句

    NSString *name=[NSString stringWithFormat:@"yoowei--%d",arc4random_uniform(100)];

    int age=arc4random_uniform(20)+10;

    NSString *sql=[NSString stringWithFormat:@"INSERT INTO t_students (name,age) VALUES ('%@',%d);",name,age];

 

    //2.执行SQL语句

     char *errmsg=NULL;

     sqlite3_exec(self.db, sql.UTF8String, NULL, NULL, &errmsg);

     if (errmsg) {//如果有错误信息

           NSLog(@"插入数据失败--%s",errmsg);

     }else{

           NSLog(@"插入数据成功");

    }

 }

}

 5.选择(select)查询操作

  select操作也可以使用sqlite3_exec函数实现,但通常使用下面的函数。

  参数:第一个参数为数据库的句柄,第二个参数为sql语句,第三个参数为sql的长度(如果设置为-1,则代表系统会自动计算sql语句的长度),第四个参数用来取数据,第五个参数为尾部一般用不上可直接写NULL。

  示例代码:

- (void)select {

  const char *sql="SELECT id,name,age FROM t_students WHERE age<20;";

  sqlite3_stmt *stmt=NULL;

 //进行查询前的准备工作

       if (sqlite3_prepare_v2(self.db, sql, -1, &stmt, NULL)==SQLITE_OK) {//SQL语句没有问题

                NSLog(@"查询语句没有问题");

              //每调用一次sqlite3_step函数,stmt就会指向下一条记录

               while (sqlite3_step(stmt)==SQLITE_ROW) {//找到一条记录

                    //取出数据

                      //(1)取出第0列字段的值(int类型的值)

                   int ID=sqlite3_column_int(stmt, 0);

                     //(2)取出第1列字段的值(text类型的值)

                   const unsigned char *name=sqlite3_column_text(stmt, 1);

                     //(3)取出第2列字段的值(int类型的值)

                     int age=sqlite3_column_int(stmt, 2);

       //            NSLog(@"%d %s %d",ID,name,age);

                     printf("%d %s %d\n",ID,name,age);

                }

         }else

         {

               NSLog(@"查询语句有问题");

         }

 }

转载于:https://www.cnblogs.com/richard-youth/p/5809375.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值