您现在的位置: 万盛学电脑网 >> 程序编程 >> 网络编程 >> 编程语言综合 >> 正文

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

作者:佚名    责任编辑:admin    更新时间:2022-06-22

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 ");          &nbs