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

来源:互联网 发布:图片美工怎么弄 编辑:程序博客网 时间:2024/05/22 20:07

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 ;

5c语言调用存储过程

调用方法或步骤:

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);

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 生完两天没有奶怎么办 一个多月的宝宝睡眠不好怎么办 产妇奶少不够吃怎么办 冬天腿上掉皮屑怎么办 一岁宝宝不喝奶粉怎么办 2岁宝宝不吃奶粉怎么办 老婆生了孩子性冷淡怎么办 宝宝有轻度地贫怎么办 不小心怀孕了该怎么办 45岁不小心怀了怎么办 喝了酒胃不舒服怎么办 备孕期间孕酮低怎么办 2个月宝宝不睡觉怎么办 生完小孩肚子还是很大怎么办 生完孩子肚皮疼怎么办 生完孩子有肚腩怎么办 生完宝宝肚子还是很大怎么办 生完孩子小腹大怎么办 生完孩子肚皮松怎么办 生过孩子肚子松怎么办 生完孩子肚皮痒怎么办 生完小孩肚子松弛怎么办 生了孩子肚子大怎么办 嫁到别的省户口怎么办 孕中期假性宫缩怎么办 频繁的假性宫缩怎么办 显卡风扇不转了怎么办 老是想不好的事怎么办 做人工受孕多囊怎么办 子宫内有囊肿该怎么办 子宫长了个囊肿怎么办 怀孕后不想要该怎么办 20多岁雌激素低怎么办 生完小孩后子宫下垂怎么办 取环之前同房了怎么办 做人流后又怀孕怎么办 仓鼠长了个肿瘤怎么办 过敏留下的黑印怎么办 脸上痘痘发炎了怎么办 脸上皮肤红痒怎么办啊 皮肤有一片红痒怎么办