展会信息港展会大全

c/c++调用mysql存储过程
来源:互联网   发布日期:2016-01-19 12:45:02   浏览:2150次  

导读:E文好的请查看原文,菜鸟级翻译,欢迎批评指正!mysql5 0支持存储过程后,现在mysql6 0Alpha 版本也是可用的。6 0不仅支持大型数据库(如 oracle和如此的大多数功能(如存储过程、视图、触发器、作业等,并修复 ...

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_ageint# 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

赞助本站

人工智能实验室

相关热词: mysql 存储过程 c++

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港