Warning: Unexpected character in input: ' in D:\php186\www.php186.com\index.php on line 38
 c/c++调用mysql存储过程-WEB开发网
您的位置:网站主页> WEB开发 > c/c++调用mysql存储过程

c/c++调用mysql存储过程

时间:2015-08-06 17:51:10   编辑:一切随缘   文章来源:php教程网 已阅读:2911 次

        c/c++调用mysql存储过程

        mysql5.0以后就支持存储过程了,目前mysql的6.0Alpha版也已经推出。6.0不仅支持大型数据库如oracle等的绝大部分功能,如存储过程、视图、触发器、job等等,而且修正了这些功能所存在的bug,其中6.0.1还支持64位windows,以及表空间。
        在c/c++中访问mysql,常见的只是一些简单的业务,使用c中嵌入简单的查询、插入、更新等操作即可。随着业务的复杂化,完成一个业务功能需要非常多的sql操作环节,把这些语句都嵌入c代码中会导致c代码越来越繁琐、不清晰,这时候,自然就想到了存储过程来封装所有的数据库逻辑,通过c简单调用 mysql存储过程接口即可达到目的,极大地减轻了c程序员的工作量,也便于前端业务处理逻辑与数据库处理逻辑的分离。下面就介绍c语言调用存储过程的简单的方法。
   

    1、首先创建一张表
        用于存放用户信息
        Create table student(
              id int auto_increment,
              name varchar(20),
              age tinyint,
              remark varchar(50),
               primary key(id)
        );

        2、插入几条信息

        Insert into student values(1,"zhouys",90, "");
        commit;

        3、查看用户信息

        mysql> select * from student;
        +------+-----------+------+----------+
        | id   | name   | age | remark |
        +------+-----------+------+----------+
        |    1 | zhouys |   90 |        |
        +------+-----------+------+-----------+
        1 row in set (0.00 sec)
         
        mysql>

        4、创建存储过程

        如下:
        delimiter //
         
        create procedure querystudent(
               in in_id int ,   #0-字符id 1-数字id   
               #
               out out_ret int,                #返回结果
               out out_name varchar(20),        #名字
               out out_age   int                #年龄   
        )
        label_a:begin
               declare v_name varchar(20) ;
               declare v_age tinyint ;
               #参数判断
               if (in_id<=0) then
                      set out_ret=-1; #id error
                      leave label_a;
               end if;
                     
               SELECT name,age into v_name,v_age from student where id=in_id limit 1;
             
               if v_age is NULL then
                      set out_ret=-2; #don't found
                      leave label_a;
               end if;   
                     
               set out_ret=0;
               set out_name=v_name;
               set out_age=v_age;
        end;
        //
        delimiter ;

        5、c语言调用存储过程

        调用方法或步骤:

        5.1、初始化Mysql句柄
        if(!mysql_init(&mysql))
               {
                      printf("mysql_init failed!\n");
                      return 0;
               }
              
        5.2、连接到mysql
        //login or connect
               if(!mysql_real_connect(&mysql,"localhost","root","","billingdb",0,NULL,CLIENT_MULTI_STATEMENTS))
               {
                      printf("mysql_real_connect() failed!\n");
                      mysql_close(&mysql);
                      return 0;
               }
              
        5.3、调用存储过程
               //call
               strcpy(query,"call querystudent (1,@ret,@ out_name,@ out_age)");
               printf("query sql=[%s]\n",query);
            ret= mysql_real_query(&mysql,query,(unsigned int)strlen(query));
           
        5.4、查询结果集并保存
        mysql_query(&mysql, "SELECT @ret,@ out_name,@ out_age ");
         
               //get result
               if (ret)
            {
                      printf("Error exec query: %s\n",mysql_error(&mysql));
            }
            else
               {
                      printf("[%s] exec...\n", query);
            }
         
               results = mysql_store_result(&mysql);
              
        5.5、获取查询结果
        while((record = mysql_fetch_row(results))) {
                      printf("[%s]-[%s]-[%s]\n", record[0], record[1],record[2]);
               }
        一般存储过程只会有一行的返回结果,^_^.

        5.6、释放资源与mysql连接句柄
        mysql_free_result(results);
        mysql_close(&mysql);

        6、结束语

               Mysql存储过程可以实现相当强大的功能,这里只是抛砖引玉的做一些实践,期望能够给大家一些帮助。也欢迎大家交流…

本文地址:http://www.php186.com/content/article/web/26471.html(转载请保留)

相关关键词搜索:c/c,调用,mysql,储过程

发表评论
      
* 以上用户言论只代表其个人观点,不代表www.php186.com网站的观点或立场
推荐文档更多

WEB开发网 | PHP教程 | Mysql教程 | Apache教程 | 最新文章 | PHP面试题| 网站地图 | Google地图 | Baidu地图 | 在线WEB论坛| 中纪委反腐最新消息

WEB技术QQ交流群:151888886 站长Q号:547218888
版权所有者:WEB开发网 地址:云南省文山州砚山县盘龙乡 滇ICP备12002707号-1
特别声明:本站内容仅供参考,不作为设计及确切依据!想了解更多,可立即进入Bbs提问