欢迎来到山村网

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

2019-03-02 11:25:53浏览:680 来源:山村网   
核心摘要:E文好的请查看原文,菜鸟级翻译,欢迎批评指正!mysql5.0支持存储过程后,现在mysql6.0Alpha 版本也是可用的。6.0不仅支持大型数

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语言调用存储过程的方法步骤:

? 1 2 3 4 5 if(!mysql_init(&mysql)) { printf("mysql_init failed!n"); return 0; } ? 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; } ? 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)); ? 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); ? 1 2 3 while((record = mysql_fetch_row(results))) { printf("[%s]-[%s]-[%s]n", record[0], record[1],record[2]); }

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

? 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

(责任编辑:豆豆)
下一篇:

导入导出数据库

上一篇:

比getjson好的底层函数是哪个有什么优点

  • 信息二维码

    手机看新闻

  • 分享到
打赏
免责声明
• 
本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们 xfptx@outlook.com