c/c++調用mysql預存程序

來源:互聯網
上載者:User

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 ");           //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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.