`

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++调用SQL存储过程实例.docx

    使用C/C++调用MySQL存储过程不仅可以简化应用程序的开发,还能显著提升系统的性能和安全性。本文将详细介绍如何在C/C++中调用MySQL存储过程,包括创建存储过程、编写C/C++代码进行调用等步骤。 #### 二、环境准备 ...

    C/C++进行mysql数据库开发所需的库文件及demo文件

    此外,对于更复杂的操作,如事务处理、存储过程的调用,可以进一步学习MySQL Connector/C的高级特性。总的来说,这个资源提供了一个便捷的起点,帮助开发者快速掌握C/C++与MySQL数据库的连接和交互。通过阅读和实践...

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

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

    c API 调用mysql存储过程完成增删改查

    在本例中,我们关注的是如何使用C API来调用MySQL数据库中的存储过程,以实现对数据的增、删、改、查(CRUD)操作。MySQL是一个广泛使用的开源关系型数据库管理系统,它提供了丰富的API供开发者使用。 首先,要使用...

    c/c++完整视频教程(四)——–数据库(MySQL,Oracle)

    根据提供的文件信息,我们可以推断出本视频教程的第四部分主要关注的是如何在C/C++环境中操作和使用数据库,特别是MySQL和Oracle这两种广泛使用的数据库管理系统。下面将详细展开这一主题的相关知识点。 ### C/C++...

    mysql-6.1.11-win32 C/C++ 连接驱动

    这个版本的C/C++连接驱动允许开发者使用C或C++编程语言直接与MySQL数据库进行交互,为应用程序提供数据存储和检索功能。在描述中提到,它也是Qt最新版本中编译MySQL驱动所必需的库文件,因为Qt官方不再随发行版附带...

    用C/C++和SQL数据库编写的学生成绩管理系统

    在实际开发中,通常会使用如MySQL、PostgreSQL或SQLite等SQL数据库系统,它们都有成熟的C/C++库供开发者调用。例如,MySQL的Connector/C++库,PostgreSQL的libpq库,以及SQLite的sqlite3库。 系统设计时,可以采用...

    用C调用mysql数据库的存储过程

    在IT领域,数据库是数据...总结,用C调用MySQL数据库的存储过程涉及连接数据库、预处理SQL命令、绑定参数、执行存储过程、处理结果集以及释放资源等多个步骤。理解这些步骤和相关函数的使用是成功实现这一目标的关键。

    C/C++访问SQLServer源码

    MySQL是另一种广泛使用的开源数据库,其C/C++接口(libmysqlclient)类似,但API略有不同,开发者需学习相应的连接、查询和处理机制。 对于初学者,这个源码示例提供了很好的学习起点,可以深入理解数据库访问的...

    C/C++快件管理系统

    9. **数据库连接**:更先进的系统可能会将数据存储在数据库中,如MySQL或SQLite,这时就需要了解如何在C/C++中进行数据库操作,如SQL查询和结果集处理。 10. **测试与调试**:实验报告可能涵盖了单元测试、集成测试...

    C++调用Mysql的所有组件

    在这个主题中,我们将深入探讨“C++调用MySQL的所有组件”,主要包括`mysql.h`头文件以及`libmySQL.dll`和`libmySQL.lib`库文件。 1. **mysql.h**: 这是MySQL C API的核心头文件,包含了所有用于连接、查询、结果...

    C/C++使用MySQL

    初始化连接的方法`initConnection()`通常会调用MySQL的`mysql_init()`和`mysql_real_connect()`函数来建立连接。`runSQLCommand(std::string sql)`方法执行SQL命令,并返回一个布尔值表示是否成功。 在执行查询后,...

    c++ 连接mysql 跨平台

    在C++中调用MySQL的存储过程,通常通过`mysql_callproc()`函数,传入存储过程名和参数。返回值和结果集可以通过`mysql_store_result()`和`mysql_use_result()`处理。这种封装对于提高性能、减少网络传输以及实现复杂...

    linux C/C++ 数据库连接池

    在Linux环境下,C/C++开发数据库连接池是提高应用程序性能和效率的重要技术。数据库连接池是一种管理数据库连接的机制,它允许程序重复使用已建立的数据库连接,而不是每次需要时都创建新的连接。这减少了创建和销毁...

    Mysql.rar_C MYSQL_C++ 访问 mysql_c# mysql_c++ mysql_mysql c++

    MySQL是一款广泛使用的开源关系型数据库管理系统,其C++接口提供了与数据库交互的能力。...通过理解这些文件,开发者可以学习到如何在C++中高效地操作MySQL数据库,为自己的应用程序提供数据存储和检索的功能。

    mysql-vs.zip_VC++ MYSQL_VC++调用mysql_mysql c++_mysql vc_visual c

    本文将详细探讨如何在VS或VC++环境中使用C++调用MySQL数据库。 首先,我们需要了解C++与MySQL交互的基础。MySQL提供了一个名为`libmysqlclient`的库,它包含了C接口,允许C++代码直接与MySQL服务器通信。在VS或VC++...

    linux下mysql 库文件和头文件,以及关于调用它的api的demo

    本资源包含Linux下MySQL的库文件、头文件以及一个调用MySQL API的示例程序,这将帮助我们理解如何在C/C++中连接并操作MySQL数据库。 首先,MySQL的库文件(通常以`.so`动态链接库或`.a`静态链接库形式存在)是C/C++...

    MySQL Connector C++ 1.6 (VS2013)

    MySQL Connector/C++是MySQL数据库的一款C++接口,它允许C++开发者通过标准的JDBC API与MySQL数据库进行交互。在本案例中,我们讨论的是专为Visual Studio 2013编译的MySQL Connector/C++ 1.6版本。这个版本确保了与...

Global site tag (gtag.js) - Google Analytics