11月24日笔记sqlite3数据库2_C/C++程序去操作数据库

1.通过C/C++程序去操作我们的数据库
    数据库对C/C++的编程接口口

    如何通过API含接口 去执行SQL语句

        Sqlite3两大对象和八大函数        两个对象
            数据库连接对象(the database conncetion Object)
                数据库连接句柄/数据库自己的文件描述符 表示一个已经打开了的数据库
                sqlite3 * 代表者一个打开的数sqlite3数据库文件
                后续所有的操作都要通过这个对象
            
            SQL 语句对象(the prepare statment Object)
            一条准备号的SQL语句 可以执行的
            类型 sqlite3_stmt
            操作数据库的标准语言就是SQL语句,在这里 也是用准备好的SQL语句对象
            去表示SQL语句去操作 数据库连接对象 表示的数据库
        
        八大语句
            利用SQL语句操作数据库的流程
            1.建立连接
            2.打开/创建一个数据库
                sqlite3_open() //打开或创建一个sqlite3的数据库连接对象
            3.操作数据库

                sqlite3_prepare_v2();        //准备SQL语句对象
                sqlite3_bind_*();               //绑定参数
                sqlite3_step();                  //执行sql语句
                sqlite3_column_*();         //数据查询到的数据库数据
                sqlite3_finalize();            //释放资源 销毁SQL语句对象

                sqlite3_exec();                //相对万能的语句

            4.关闭数据库
                sqlite3_close();        //关闭一个数据库连接对象


2.具体的API函数接口
    1.打开数据库

        sqlite3_open()
        SQLITE_API int sqlite3_open(
            const char *filename,   /* 你要打开数据库的名称 */
            sqlite3 **ppDb,            /* OUT: SQLite db handle */
            );

            handle 句柄 指打开的数据库的对象或者说打开的数据库的文件描述符
                    后续对该数据库的所有操作都是通过这个对象
        
            参数
                filename: 要打开数据库的名称(带路径)
                ppDb:   要打开的数据对象 数据库对象是一个一级指针
                        所以保存数据对象需要一个二级指针来接收
        返回值
            成功返回 SQLITE_OK
            失败返回 其他值
        
    2.关闭数据库

        sqlite3_close()

        SQLITE_API int sqlite3_close(sqlite3*);

            sqlite3 :需要关闭的数据库对象 sqlite3_open()第三个参数的指向空间的值

    3.准备一条SQL语句

        sqlite3_prepare_v2();
        SQLITE_API int sqlite3_prepare_v2(
            sqlite3 *db,            /*要对那个数据库进行操作 数据库对象*/
            const char *zSql,       /* 要执行的SQL语句 用字符串表示*/
                                表示字符串需要用到"" 那SQL语句中表示字符串的双引号怎么办
                                    SQL语句中的双引号变成单引号

            int nByte,              /* zSql字符串有多少个字符 */
                                        <0 找到第一个'\0'表示第一条语句
                                            一次只会准备一条语句
                                        =0 不准备语句
                                         >0 准备到nByte指定的字节为止
            sqlite3_stmt **ppStmt,  /* 保存解析好的SQL语句 */
                                    需要一个二级指针去保存准备好的SQL语句

            const char **pzTail ,    /*保存zSql字符串里面没有解析的部分*/
            );

    返回值:
            成功返回 SQLITE_OK;
            失败返回其他值
    
    4.执行一条准备好的语句

        sqlite3_step()
        
        SQLITE_API int sqlite3_step(sqlite3_stmt*);

        sqlite3_stmt* 要执行的sql语句对象

            成功返回 SQLITE_DONE;
            失败返回 其他值

            如果指令是查询 成功的返回值不是 SQLITE_DONE
                SELECT 命令成功的返回值 SQLITE_ROW

    5.释放资源
        sqlite3_finalize()
        在prepare的时候 很有可能让stmt指向动态分配的内存空间,通过函数释放所有资源

        SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt);        

        pStm: 需要释放掉的SQL语句对象
            成功返回 SQLITE_OK;
            失败返回 其他值

    6.sqlite3_bind_*();//绑定参数
        需要和几个函数一起使用
        sqlite3_reset(sqlite3_stmt*);        如果有多个信息需要录入
        正常情况下

        char buf[1024];
        sqlite3_stmt *pStmt;
        for(int i = 3;i< 6;i++)
        {
            sprintf(buf,"INSERT INTO STUDENT_INFO VALUES(%d,'张飞','1970/1/1');",i);
            sqlite3_prepare_v2(pDb,buf,strlen(buf),&pStmt,NULL);
            sqlite3_step(pStmt);
        }


        sqlite3_stmt *pStmt;
        char buf[1024] ={"INSERT INTO STUDENT_INFO VALUES(?,'张飞','1970/1/1');"};
        sqlite3_prepare_v2(pDb,buf,strlen(buf),&pStmt,NULL);
        for(int i = 3;i< 6;i++)
        {
            
            sqlite3_bind_int(pDb,1,i);
            sqlite3_step(pStmt);
            sqlite3_reset(pStmt);
        }


        ?  用于占位

        sqlite3_bind_int(sqlite3_stmt* , int , int );

            第一个int 用于表示第几个?
            第二个int 表示要输入的值

        SQLITE_API int sqlite3_bind_text(sqlite3_stmt*, int , const char* , int , void(*)(void*) );

            第二个参数int 用于表示第几个?
            第三个参数const char* 表示要输入的字符串
            第四个参数int 表示的是字符串的产固定
            第五个参数是一个回调函数 给NULL就好了

        sqlite3_reset(pStmt); 重置SQL语句对象


    7.sqlite3_exec();
        这个函数结构 是 准备 执行和释放三个函数的集合
        它可以简化程序操作SQL的流程

        SQLITE_API int sqlite3_exec(
            sqlite3* ,                    /* 打开的数据库对象*/
            const char *sql ,        /* 要执行的SQL语句 用字符串表示  以'\0'结束*/
            int (*callback)(void*,int,char**,char**) ,

                                            /* 回调函数 只有命令是 SELECT 才会去调用相应的回调函数 */

                                           /*否则填 NULL */
            void *,                      /* 回调函数的第一个参数 */
            char **errmsg,      /* 错误信息 */
                             如果这个参数不为空 则将错误信息写入到(*errmsg)指向的空间中
                                    这个空间的大小和地址由函数给你分配 所以如果出错了
                                           需要调用sqlite3_free()去释放
            );


    
    回调函数的类型是 int (*callback)( void* , int , char** , char** )
    只有命令是SELECT 才会去调用回调函数

    第一个参数是用户定义 void*
    第二参数 int 是查询结果有多少列 
    第三个参数char** 指向一个字符串的指针数组 就是查询数据的每一列信息
    第四个参数char** 指向一个字符串的指针数组 表头 就是字段名

    SELECT有多少条记录 就会执行多少次回调函数

      回调函数需要 return 0 ,否则sqlite3_exec会报错       



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值