html5中文学习网

您的位置: 首页 > 网站及特效实例 > jquery特效 » 正文

c/c++调用mysql存储过程_编程语言综合

[ ] 已经帮助:人解决问题

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

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: %s/n",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]);
       }

常规的存储过程将只返回结果,^_^。xMAHTML5中文学习网 - HTML5先行者学习网

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

?
1
2
mysql_free_result(results);
mysql_close(&mysql);

6、结论

Mysql 的存储过程可以实现相当强大的功能,这里只是一些基本的用法,希望能给你一些帮助。也欢迎分享......xMAHTML5中文学习网 - HTML5先行者学习网

7、个人使用经验心得

像C#调用都可以绑定输出参数,直接通过输出参数得到值,但是c++中使用prepare绑定输出参数,却返回以下错误信息:xMAHTML5中文学习网 - HTML5先行者学习网

Error Code: 1414. OUT or INOUT argument 2 for routine knockout_dbo.ko_SignUpYoungBoxer is not a variable or NEW pseudo-variable in BEFORE triggerxMAHTML5中文学习网 - HTML5先行者学习网

 xMAHTML5中文学习网 - HTML5先行者学习网

(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助