`

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

阅读更多
转:[url] http://blog.sina.com.cn/s/blog_62aab2760100h9ec.html
[/url]

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

                                             ——转
分享到:
评论

相关推荐

    c++实现调mysql存储过程

    c++实现调mysql存储过程,实现存储过程的出参入参,可以支持查询多数据返回,还有存储过程的复杂数据的增删改等

    程序逻辑抽取器-c/c++/esql/oracle/informix/mysql代码分析、查看工具

    《程序逻辑抽取器》-PLEA支持c/c++/esqlc,数据库支持Oracle/informix/mysql。 通过对源码的抽取,将函数,存储过程,以及它们的调用关系和数据操作形式以报告的形式呈现给使用者。 通过对函数、变量、宏、类型成员...

    C/C++-数据结构-图书管理系统-数据结构课设

    数据库调用MySql实现 本次项目设计并实现了一个精简的多用户图书管路系统。应用后端通过与 mysql 进行连接实现对数据的管理。用户可以通过界面实现登陆、注册、借书、 还书等操作。管理员可以通过登陆界面实现对...

    MySQL中文参考手册.chm

    &lt;br/&gt;5.4.4 存储过程和触发器 &lt;br/&gt;5.4.5 外键(Foreign Keys)&lt;br/&gt;5.4.5.1 不使用外键的理由 &lt;br/&gt;5.4.6 视图(Views) &lt;br/&gt;5.4.7 '--'作为一个 注解的开始 &lt;br/&gt;5.5 MySQL 遵循什么标准? &lt;br/&gt;5.6 怎样处理没有提交...

    使用C实现对Mysql的存储调用

    使用C语言对Mysql实现了简单的存数调用,其功能是实现一个简单的加法。

    MySQL 5.1官方简体中文参考手册

    4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 5. 数据库管理 5.1. MySQL服务器和服务器启动脚本 5.1.1. 服务器端...

    MySQL中文参考手册

    + 5.4.4 存储过程和触发器 + 5.4.5 外键(Foreign Keys) # 5.4.5.1 不使用外键的理由 + 5.4.6 视图(Views) + 5.4.7 '--'作为一个 注解的开始 o 5.5 MySQL 遵循什么标准? o 5.6 怎样处理没有提交/回卷(COMMIT ...

    MySQL 5.1中文手冊

    4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 5. 数据库管理 5.1. MySQL服务器和服务器启动脚本 5.1.1. 服务器端...

    MySQL 5.1参考手册

    4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 5. 数据库管理 5.1. MySQL服务器和服务器启动脚本 5.1.1. 服务器端...

    MySQL 5.1参考手册 (中文版)

    4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 5. 数据库管理 5.1. MySQL服务器和服务器启动脚本 5.1.1. 服务器端...

    MySQL 5.1参考手册中文版

    4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 5. 数据库管理 5.1. MySQL服务器和服务器启动脚本 5.1.1. ...

    mysql5.1中文手册

    调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 5. 数据库管理 5.1. MySQL服务器和服务器启动脚本...

    MYSQL中文手册

    4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 5. 数据库管理 5.1. MySQL服务器和服务器启动脚本 5.1.1. ...

    mysql官方中文参考手册

    4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 5. 数据库管理 5.1. MySQL服务器和服务器启动脚本 5.1.1. 服务器端...

    MySQL5.1参考手册官方简体中文版

    4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 5. 数据库管理 5.1. MySQL服务器和服务器启动脚本 5.1.1. 服务器端...

    基于Opencv+Mysql+QT实现车牌识别及停车场管理系统源码(含超详细注释+项目说明).zip

    【资源说明】 1.项目代码均经过功能验证ok,...&gt; ​ 由于直接将在QT中引用MySQL`并不能`直接使用,所以需要将MySQL的动态链接库存放到QT的bin目录下,才可以调用MySQL。QT默认使用`C++11`编译 更多详情见项目说明!!

    基于QT和C++实现车牌识别搭建的停车场管理系统源码含项目说明.zip

    &gt; ​ 由于直接将在QT中引用MySQL`并不能`直接使用,所以需要将MySQL的动态链接库存放到QT的bin目录下,才可以调用MySQL。QT默认使用`C++11`编译 ``` CONFIG += c++11 ``` &gt; 1,在QT所创建项目中的pro文件中添加sql ...

Global site tag (gtag.js) - Google Analytics