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

E文好的请查看原文,菜鸟级翻译,欢迎批评指正!
mysql5.0支持存储过程后,现在mysql6.0Alpha 版本也是可用的。6.0不仅支持大型数据库(如 oracle和如此的大多数功能(如存储过程、视图、触发器、作业等,并修复了这些功能存在的bug,6.0.1 版还支持windows 64 位 和表空间。
C/c + + 要访问 mysql,只是一些简单的常用操作,c嵌入式简单查询、插入、更新和其他操作的使用可以。这些语句作为业务复杂、完整的业务功能需要的sql 操作,很大一部分是嵌入c 代码c 代码会导致更多和更复杂的不清楚这一次自然的存储过程来封装所有数据库逻辑思想,简单地通过调用mysql 存储的过程 c 接口可以实现他们的目标大大减少工作量的c 程序员,但也容易处理前端业务逻辑和数据库处理逻辑分离。在这里只调用存储的过程c 语言的简单方法。

1、首先创建一个表用于存储用户信息

?

1
2
3
4
5
6
7

Create table student(
      id int auto_increment,
      name varchar(20),
      age tinyint,
      remark varchar(50),
       primary key(id)
);

2、插入几条用户信息

?

1
2

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

3、查看刚刚插入的用户信息

?

1
2
3
4
5
6
7
8
9

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

4、创建存储过程

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

delimiter //
  
create procedure querystudent(
       in in_id int ,   #0- Character ID 1-digital id   
       #
       out out_ret int,                # Returns the result
       out out_name varchar(20),        # First name
       out out_age   int                # Age    
)
label_a:begin
       declare v_name varchar(20) ;
       declare v_age tinyint ;
       # Parameters determine
       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'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 的句柄初始化

?

1
2
3
4
5

if(!mysql_init(&mysql))
       {
              printf("mysql_init failed!n");
              return 0;
       } 

5.2、连接到MySQL数据库

?

1
2
3
4
5
6
7

//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、调用存储过程

?

1
2
3
4

//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、查询返回值及输出参数值

?

1
2
3
4
5
6
7
8
9
10
11
12
13

mysql_query(&mysql, "SELECT @ret,@ out_name,@ out_age ");
  
       //get result
       if (ret)
    {
              printf("Error exec query: %sn",mysql_error(&mysql));
    }
    else
       {
              printf("[%s] exec...n", query);
    }
  
       results = mysql_store_result(&mysql);

5.5、获取结果值

?

1
2
3

while((record = mysql_fetch_row(results))) {
              printf("[%s]-[%s]-[%s]n", record[0], record[1],record[2]);
       }

常规的存储过程将只返回结果,^_^。

5.6、释放资源和mysql连接句柄

?

1
2

mysql_free_result(results);
mysql_close(&mysql);

6、结论

Mysql 的存储过程可以实现相当强大的功能,这里只是一些基本的用法,希望能给你一些帮助。也欢迎分享......

7、个人使用经验心得

像C#调用都可以绑定输出参数,直接通过输出参数得到值,但是c++中使用prepare绑定输出参数,却返回以下错误信息:

Error Code: 1414. OUT or INOUT argument 2 for routine knockout_dbo.ko_SignUpYoungBoxer is not a variable or NEW pseudo-variable in BEFORE trigger

 

时间: 2024-09-16 12:57:56

c/c++调用mysql存储过程的相关文章

java调用mysql存储过程实例分析

  本文实例讲述了java调用mysql存储过程的方法.分享给大家供大家参考.具体如下: 数据库的测试代码如下 : 1.新建表test ? 1 2 3 4 5 create table test( field1 int not null ) TYPE=MyISAM ; insert into test(field1) values(1); 2.删除已存在的存储过程: ? 1 2 3 -- 删除储存过程 delimiter // -- 定义结束符号 drop procedure p_test; 3

php调用MySQL存储过程的方法集合

本篇文章是对php调用MySQL存储过程的方法进行了集合与汇总,需要的朋友参考下   类型一:调用带输入.输出类型参数的方法 复制代码 代码如下: $returnValue = ''; try {  mysql_query ( "set @Return" );  $spname = 'P__Test_GetInfo1';  mysql_query ( "call $spname(@Return, '{$userId}', '{$pwd}')" ) or die (

关于mybatis 怎么调用mysql存储过程

问题描述 关于mybatis 怎么调用mysql存储过程 这个过程用到2个表 我想问一下dao层该怎么写 controller又该怎么写 大神能不能详细点 我脑袋有点笨笨的 解决方案 建立存储过程:DELIMITER $$ USE test$$ DROP PROCEDURE IF EXISTS user_user_selectUserByProAndCity_sp$$ CREATE DEFINER=demao@% PROCEDURE user_user_selectUserByProAndCit

mysql c# 存储过程-C#调用MySql存储过程报错,请各位帮忙解答一下

问题描述 C#调用MySql存储过程报错,请各位帮忙解答一下 public DataSet GetPagerList(string tableName, string primaryKey, string columns, string whereSql, string sortField, int? pageSize, int? currPage, bool isDesc) { MySqlParameter[] param = new MySqlParameter[]{ new MySqlPa

Mybatis调用MySQL存储过程的简单实现

1.存储过程的简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的.数据库中的存储过程可以看做是对编程中

mysql-ODBC调用MYSQL存储过程

问题描述 ODBC调用MYSQL存储过程 ODBC访问MySQL地带OUT参数的存储过程时出错,提示信息为:OUT or INOUT argument 1 for routine test.ProcTest2 is not a variable or NEW pseudo-variable in BEFORE trigger 查了资料,貌似是MySQL的bug,是这样的吗?求各位大侠帮帮忙,谢谢了! 解决方案 http://blog.sina.com.cn/s/blog_4b3ad3b70100

存储过程 带参数-java调用mysql存储过程输出参数

问题描述 java调用mysql存储过程输出参数 CREATE PROCEDURE T_WEATHER_PRO (IN tmdn VARCHAR(12),OUT tmsg VARCHAR(12)) BEGIN DECLARE states,beginTime,endTime VARCHAR(2) ; SELECT T_STATES,T_BEGINTIME,T_ENDTIME INTO states,beginTime,endTime FROM T_USER_WEATHER WHERE T_USE

Java实现调用MySQL存储过程详解_java

前言 存储过程(Stored Procedure)是存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它. Java调用MySQL的存储过程,需要用JDBC连接,环境eclipse 首先查看MySQL中的数据库的存储过程,接着编写代码调用 mysql> show procedure status; +------+-------------+-----------+----------------+-------------

Java调用MySQL存储过程并获得返回值的方法_java

本文实例讲述了Java调用MySQL存储过程并获得返回值的方法.分享给大家供大家参考.具体如下: private void empsInDept(Connection myConnect, int deptId) throws SQLException { CallableStatement cStmt = myConnect.prepareCall("{CALL sp_emps_in_dept(?)}"); cStmt.setInt(1, deptId); cStmt.execute

.net调用mysql存储过程中输出参数的问题,求救~~

问题描述 环境.net2.0+mysql5.0.37+Connector/Net5.2问题:在ASP.NET中调用mysql存储过程(输出参数名于存储过程输出参数名不同时),提示输出参数不存在:Parameter'@param1'notfoundinthecollection.当ASP.NET中修改输出参数名于存储过程中输出参数名相同的时候,提示一个新的参数未定义:Parameter'@1118079786param1'mustbedefined.而这个参数变量是自动生成的,在存储过程中我并没有