亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網(wǎng)絡(luò),我們將竭誠為您提供優(yōu)質(zhì)的服務(wù)! 誠征網(wǎng)絡(luò)推廣 | 網(wǎng)站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯(lián)系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業(yè)務(wù)咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發(fā)消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術(shù)支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當前位置:首頁 >> 技術(shù)文章 >> 文章瀏覽
技術(shù)文章

在MySQL數(shù)據(jù)庫中使用C執(zhí)行SQL語句

添加時間:2013-1-19 17:52:08  添加: 思海網(wǎng)絡(luò) 
與PostgreSQL相似,可使用許多不同的語言來訪問MySQL,包括C、C++、Java和Perl。從Professional Linux Programming中第5章有關(guān)MySQL的下列章節(jié)中,Neil Matthew和Richard Stones使用詳盡的MySQL C接口向我們介紹了如何在MySQL數(shù)據(jù)庫中執(zhí)行SQL語句。他們將討論返回數(shù)據(jù)的語句,例如INSERT以及不返回數(shù)據(jù)的語句,例如UPDATE和DELETE。然后,他們將編寫從數(shù)據(jù)庫檢索數(shù)據(jù)的簡單程序。

執(zhí)行SQL語句

現(xiàn)在,我們已經(jīng)有了一個連接,并且知道如何處理錯誤,是時候討論使用我們的數(shù)據(jù)庫來作一些實際工作了。執(zhí)行所有類型的SQL的主關(guān)鍵字是mysql_query:

int mysql_query(MYSQL *connection, const char *query)


正如您所見,它非常簡單。它取一個指向連接結(jié)構(gòu)的指針和包含要執(zhí)行的SQL的文本字符串;與命令行工具不同,將不使用結(jié)束分號。成功之后,返回0。在需要包含二進制數(shù)據(jù)的特殊情況下,可以使用相關(guān)的函數(shù),mysql_real_query。雖然出于本章的目的,我們僅需要討論mysql_query。

不返回數(shù)據(jù)的SQL語句

我們將先討論UPDATE、DELETE和INSERT語句。因為它們不返回數(shù)據(jù),所以更易于使用。

這里我們將介紹的另一個重要函數(shù)是檢查受影響的行數(shù)的函數(shù):

my_ulonglong mysql_affected_rows(MYSQL *connection);


可能關(guān)于這一函數(shù)的最顯而易見的事就是其非同尋常的返回結(jié)果。由于可移植性原因,這是一個特殊的無符號類型。為了在printf中使用,建議將其強制轉(zhuǎn)換成使用%lu格式規(guī)范的無符號長整數(shù)。這個函數(shù)返回受以前的UPDATE、INSERT或DELETE查詢影響的行數(shù),這些查詢是使用mysql_query執(zhí)行的。

通常對于mysql_函數(shù),返回碼0表示沒有行受影響;正數(shù)表示實際結(jié)果,通常是受影響的行數(shù)。

如前所述,當使用mysql_affected_rows時可能出現(xiàn)未期望的結(jié)果。讓我們先討論受INSERT語句影響的行數(shù),它將按預(yù)期進行操作。將下列代碼添加到程序 connect2.c 中,并且稱其為insert1.c:

#include #include #include "mysql.h"int main(int argc, char *argv[]) {MYSQL my_connection;int res;mysql_init(&my_connection); if (mysql_real_connect(&my_connection, "localhost",     "rick", "bar", "rick", 0, NULL, 0)) {    printf("Connection success\n");   res = mysql_query(&my_connection,          "INSERT INTO children(fname,age),          VALUES('Ann',3)");   if (!res) {              printf("Inserted %lu rows\n",               (unsigned long)mysql_affected_rows(&my_connection));            } else {              fprintf(stderr, "Insert error %d: s\n",mysql_errno ,              (&my_connection),              mysql_error(&my_connection));             }    mysql_close(&my_connection);         } else {           fprintf(stderr, "Connection failed\n");            if (mysql_errno(&my_connection)) {fprintf(stderr, "Connection error %d: %s\n",mysql_errno(&my_connection),mysql_error(&my_connection));            }         }         return EXIT_SUCCESS;    }


正如預(yù)期,插入的行數(shù)為1。

現(xiàn)在,我們更改代碼,所以 'insert' 部分被替換成:

 mysql_errno(&my_connection), mysql_error(&my_connection));         }      }      res = mysql_query(&my_connection, "UPDATE children SET AGE = 4      WHERE fname = 'Ann'");      if (!res) {         printf("Updated %lu rows\n",                           (unsigned long)mysql_affected_rows(&my_connection));      } else {        fprintf(stderr, "Update error %d: %s\n",mysql_errno(&my_connection),                                                  mysql_error(&my_connection));      }


現(xiàn)在假設(shè)子表中有的數(shù)據(jù),如下:

childnofnameage1

2

3

4

5

6

7

8

9

10

11

Jenny

Andrew

Gavin

Duncan

Emma

Alex

Adrian

Ann

Ann

Ann

Ann

14

10

4

2

0

11

5

3

4

3

4



如果我們執(zhí)行update1,希望報告的受影響行數(shù)為4,但是實際上程序報告2,因為它僅必須更改2行,雖然WHERE子句標識了4行。如果想讓mysql_affected_rows報告的結(jié)果為4這可能是熟悉其它數(shù)據(jù)庫的人所期望的),則需要記住將CLIENT_FOUND_ROWS標志傳遞到mysql_real_connect,在 update2.c中的程序如下:

if (mysql_real_connect(&my_connection, "localhost",                                  "rick", "bar", "rick", 0, NULL, CLIENT_FOUND_ROWS)) {



如果我們在數(shù)據(jù)庫中復(fù)位數(shù)據(jù),然后運行帶有這種修改的程序,則它報告的行數(shù)為4。

函數(shù)mysql_affected_rows還有最后一個奇怪之處,它發(fā)生在從數(shù)據(jù)庫中刪除數(shù)據(jù)時。如果使用WHERE子句,則mysql_affected_rows將按預(yù)期返回刪除行數(shù)。但是,如果沒有WHERE子句,則刪除所有行,報告受影響的行數(shù)卻為0。這是因為由于效率原因優(yōu)化刪除整個表。這種行為不受CLIENT_FOUND_ROWS選項標志的影響。
關(guān)鍵字:MySQL、數(shù)據(jù)庫

分享到:

頂部 】 【 關(guān)閉
版權(quán)所有:佛山思海電腦網(wǎng)絡(luò)有限公司 ©1998-2024 All Rights Reserved.
聯(lián)系電話:(0757)22630313、22633833
中華人民共和國增值電信業(yè)務(wù)經(jīng)營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網(wǎng)站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網(wǎng)安 舉報有獎  警警  手機打開網(wǎng)站