c / c + + 呼叫mysql儲存過程
原文:c / c + + call mysql stored procedure
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 語言的簡單方法。
C/c + + 要訪問 mysql,只是一些簡單的常用操作,c嵌入式簡單查詢、插入、更新和其他操作的使用可以。這些語句作為業務複雜、完整的業務功能需要的sql 操作,很大一部分是嵌入c 程式碼c 程式碼會導致更多和更復雜的不清楚這一次自然的儲存過程來封裝所有資料庫邏輯思想,簡單地通過呼叫mysql 儲存的過程 c 介面可以實現他們的目標大大減少工作量的c 程式設計師,但也容易處理前端業務邏輯和資料庫處理邏輯分離。在這裡只呼叫儲存的過程c 語言的簡單方法。
1、首先建立一個表用於儲存使用者資訊
Create table student(
id int auto_increment,
name varchar(20),
age tinyint,
remark varchar(50),
primary key(id)
);
2、插入幾條使用者資訊
Insert into student values(1,"zhouys",90, "");
commit;
3、檢視剛剛插入的使用者資訊
mysql> select * from student;
+------+-----------+------+----------+
| id | name | age | remark |
+------+-----------+------+----------+
| 1 | zhouys | 90 | |
+------+-----------+------+-----------+
1 row in set (0.00 sec)
mysql>
4、建立儲存過程
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 的控制程式碼初始化
if(!mysql_init(&mysql))
{
printf("mysql_init failed!\n");
return 0;
}
5.2、連線到MySQL資料庫
//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、呼叫儲存過程
//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、查詢返回值及輸出引數值
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、獲取結果值
while((record = mysql_fetch_row(results))) {
printf("[%s]-[%s]-[%s]\n", record[0], record[1],record[2]);
}
常規的儲存過程將只返回結果,^_^。5.6、釋放資源和mysql連線控制程式碼
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
以下連結是找到的相關問題討論:
http://forums.mysql.com/read.php?38,505961
http://bugs.mysql.com/bug.php?id=25970
下面是一個c++的MySQL封裝
http://tangentsoft.net/mysql++/
相關文章
- C#呼叫 oracle儲存過程C#Oracle儲存過程
- C#呼叫Oracle儲存過程C#Oracle儲存過程
- mysql儲存過程及c#呼叫標準版MySql儲存過程C#
- c#呼叫儲存過程小記C#儲存過程
- mysql如何呼叫儲存過程MySql儲存過程
- 用PHP呼叫MySQL儲存過程PHPMySql儲存過程
- C/C++封裝庫ocicpplib呼叫Oracle儲存過程的方法C++封裝Oracle儲存過程
- MySQL儲存過程語句及呼叫MySql儲存過程
- mysql 儲存過程,以及mybatis如何呼叫MySql儲存過程MyBatis
- PHP呼叫MYSQL儲存過程例項PHPMySql儲存過程
- mysql-定時呼叫儲存過程MySql儲存過程
- 呼叫儲存過程儲存過程
- 完整的分頁儲存過程以及c#呼叫方法儲存過程C#
- MySQL儲存過程詳解 mysql 儲存過程MySql儲存過程
- mysql多次呼叫儲存過程的問題MySql儲存過程
- Winform呼叫儲存過程ORM儲存過程
- perl呼叫儲存過程儲存過程
- jdbc呼叫儲存過程JDBC儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- MySQL儲存過程詳解 mysql 儲存過程linkMySql儲存過程
- C#二十六 使用Ado.Net呼叫儲存過程C#儲存過程
- mysql 儲存過程MySql儲存過程
- linux呼叫儲存過程Linux儲存過程
- PB中呼叫儲存過程儲存過程
- java 呼叫oracle 儲存過程JavaOracle儲存過程
- php呼叫mssql儲存過程PHPSQL儲存過程
- java中呼叫儲存過程Java儲存過程
- 在儲存過程A中呼叫儲存過程B的結果儲存過程
- c# 三步遞交模式呼叫同一個儲存過程C#模式儲存過程
- MySql儲存過程—2、第一個MySql儲存過程的建立MySql儲存過程
- mysql儲存過程整理MySql儲存過程
- MySQL之儲存過程MySql儲存過程
- [MYSQL -23儲存過程]MySql儲存過程
- MYSQL儲存過程管理MySql儲存過程
- mysql儲存過程例子MySql儲存過程
- mysql的儲存過程MySql儲存過程
- MySQL---------儲存過程MySql儲存過程
- jsp中呼叫儲存過程JS儲存過程