• sqlite学习


    一鼓作气,今天继续学习了sqlite数据库在Xcode上的一些操作,主要是通过用oc代码进行salite表格的创建,删除,修改;以及对现有的表格数据进行增,删,改,查。虽然有点累,但是收获不小,感觉很充实,继续加油!

          

    //把数据库sqlite3导入到工程(在Bulider Phrase 中的Linker中点击➕号,查找sqlite3文件,选择再添加即可)

        //打开数据库

        //提供C的字符串,c串时我们要打开数据库的完整路径和文件名

        NSString *path=NSHomeDirectory();//获得家的路径

        path=[path stringByAppendingPathComponent:@"mydb.sqlite"];

        NSLog(@"%@",path);

        sqlite3 *db;

        //打开数据库,如果没有这个数据库,就创建这个数据库的文件并且打开这个数据库,如果有这个数据库就直接打开该数据库

        sqlite3_open([path UTF8String], &db);

        int result=sqlite3_open([path UTF8String], &db);

        //判断打开数据库是否成功

        if (result!=SQLITE_OK) {

            NSLog(@"打开失败!");

        }

        //关闭数据库

        sqlite3_close(db);

        

        //提供C的字符串,c串时我们要打开数据库的完整路径和文件名

        NSString *path1=NSHomeDirectory();//获得家的路径

        path1=[path1 stringByAppendingPathComponent:@"mydb.sqlite"];

        sqlite3 *mydb;//创建一个数据库名叫mydb

        //打开数据库,如果没有这个数据库,就创建这个数据库的文件并且打开这个数据库,如果有这个数据库就直接打开该数据库

         sqlite3_open([path UTF8String], &mydb);

        //对数据库进行操作

        //定制一个sql表

        char *sql="create table if not exists t_student(name text,age integer)";

        char *err;//出错信息

        //运行sql,并返回运行结果

        result=sqlite3_exec(mydb, sql, NULL, NULL, &err);

        //判断运行是否成功

        if (result!=SQLITE_OK) {

            NSLog(@"运行sql错误,error原因:%s",err);

        }

       /*

        //增

        NSString *name=self.nameText.text;

        NSString *age=self.ageText.text;

        //sql="insert into t_student(name,age) values('张三',22) ";

        NSString *sql1=[NSString stringWithFormat:@"insert into t_student(name,age) values('%@',%@)",name,age];

        //将OC的字符串转化为C字符串

        //[sql1 UTF8String];

        //运行sql,并返回运行结果

        result=sqlite3_exec(mydb,[sql1 UTF8String],NULL,NULL,&err);

        if (result!=SQLITE_OK)

        {

            NSLog(@"运行sql错误,error原因:%s",err);

        }

         */

        /*

        //增,(可以插入特殊字符,用绑定的方式)

        NSString *name=self.nameText.text;

        NSString *age=self.ageText.text;

        char *sql2="insert into t_student(name,age) values(?,?) ";

        sqlite3_stmt *stmt;//stmt本身为指向行的指针,故该定义为一个指向指针的指针,即表示一个二维数组

        //运行sql,并返回运行结果

        result=sqlite3_prepare_v2(mydb,sql2,-1,&stmt,NULL);

        if (result==SQLITE_OK)

        {

           // 绑定参数

            result=sqlite3_bind_text(stmt, 1, [name UTF8String],-1, NULL);

            //判断绑定姓名是否成功

            if (result!=SQLITE_OK) {

                NSLog(@"绑定姓名失败!!!");

            }

            // 绑定参数

            result=sqlite3_bind_int(stmt, 2, [age intValue]);

            //判断绑定姓名是否成功

            if (result!=SQLITE_OK) {

                NSLog(@"绑定年龄失败!!!");

            }

        }

        if (sqlite3_step(stmt)!=SQLITE_DONE)

        {

            NSLog(@"插入数据失败!!!");

        }

        sqlite3_finalize(stmt);

        */

        

       /*

        //删

        sql="delete from t_student where age=26";

        //运行sql,并返回运行结果

        result=sqlite3_exec(mydb, sql, NULL, NULL, &err);

        //判断运行是否成功

        if (result!=SQLITE_OK) {

            NSLog(@"运行sql错误,error原因:%s",err);

        }

        */

        /*

        //删除,用绑定的方式

        NSString *name=self.nameText.text;

      //NSString *age=self.ageText.text;

        sqlite3_stmt *stmt;

        char * sql3="delete from t_student where name=?";

        //运行sql,并返回运行结果

        result=sqlite3_prepare_v2(mydb, sql3, -1, &stmt, NULL);

        //判断运行是否成功

        if (result==SQLITE_OK)

        {

            // 绑定参数

            result=sqlite3_bind_text(stmt, 1, [name UTF8String],-1, NULL);

            //判断绑定姓名是否成功

            if (result!=SQLITE_OK) {

                NSLog(@"绑定姓名失败!!!");

            }

            else

            {

            // 绑定参数

            result=sqlite3_step(stmt);

            //判断绑定姓名是否成功

                if(result!=SQLITE_DONE)

                 {

                   NSLog(@"删除失败!!!");

                  }

            }

        }

        else

        {

            NSLog(@"绑定失败!!!");

        }

        sqlite3_finalize(stmt);

         */

        /*

        //改

        sql="update t_student set name='赵六' where age=22 ";

        //运行sql,并返回运行结果

        result=sqlite3_exec(mydb, sql, NULL, NULL, &err);

        //判断运行是否成功

        if (result!=SQLITE_OK)

        {

            NSLog(@"运行sql错误,error原因:%s",err);

        }

         */

        //修改,用绑定的方式

        char *sql4="update t_student set name=? where age=?";

        NSString *name=self.nameText.text;

        NSString *age=self.ageText.text;

        BOOL bFlag=NO;

        sqlite3_stmt *stmt;

        result=sqlite3_prepare_v2(mydb, sql4 , -1, &stmt ,NULL);

        if (result==SQLITE_OK) {

            result=sqlite3_bind_text(stmt, 1, [name UTF8String], -1, NULL);

            if (result!=SQLITE_OK) {

                NSLog(@"绑定姓名失败!!!");

                bFlag=YES;

            }

            result=sqlite3_bind_int(stmt, 2, [age intValue]);

            if (result!=SQLITE_OK) {

                NSLog(@"绑定年龄失败!!!");

                bFlag=YES;

            }

            if (bFlag==NO) {

                result=sqlite3_step(stmt);

                if (result!=SQLITE_DONE) {

                    NSLog(@"修改失败!!!");

                }

            }

        }

        else

        {

            NSLog(@"预处理失败(准备运行失败 )!!!");

        }

        //查

        

        sql="select * from t_student";

        result=sqlite3_prepare_v2(mydb, sql , -1, &stmt ,NULL);

        if (result==SQLITE_OK)

        {

            //遍历返回的结构

            while(sqlite3_step(stmt)==SQLITE_ROW)//的到返回结构的一行

            {

                char*name=(char*)sqlite3_column_text(stmt, 0);//的到返回结构的一列,其中0代表第一列,依次类推

                int age=sqlite3_column_int(stmt, 1);//的到返回结果的第二列

                NSString *strname=[NSString stringWithUTF8String:name];

                NSLog(@"name=%@,age=%d",strname,age);

            }

        }

        else

        {

            NSLog(@"预处理失败");

        }

        sqlite3_finalize(stmt);//释放层数占用的资源

        sqlite3_close(mydb);

  • 相关阅读:
    遇到的相关问题总结
    AI测试相关文章
    常用模块文档地址
    09-微服务接口:怎么用Mock解决混乱的调用关系
    03-思维方式:用一个案例彻底理解接口测试的关键逻辑
    1-基础:跳出细节看全局,接口测试到底是在做什么?
    21-Python并发编程之Futures
    使用原生php读写excel文件
    在for、foreach循环体中添加数组元素
    eval函数的坑
  • 原文地址:https://www.cnblogs.com/kl137754356/p/5995831.html
Copyright © 2020-2023  润新知