![編程實踐CAPIs包含在mysqlclient庫文件當(dāng)中與MySQL_第1頁](http://file4.renrendoc.com/view/313cb62d3cc1a5d80266c90129139600/313cb62d3cc1a5d80266c901291396001.gif)
![編程實踐CAPIs包含在mysqlclient庫文件當(dāng)中與MySQL_第2頁](http://file4.renrendoc.com/view/313cb62d3cc1a5d80266c90129139600/313cb62d3cc1a5d80266c901291396002.gif)
![編程實踐CAPIs包含在mysqlclient庫文件當(dāng)中與MySQL_第3頁](http://file4.renrendoc.com/view/313cb62d3cc1a5d80266c90129139600/313cb62d3cc1a5d80266c901291396003.gif)
![編程實踐CAPIs包含在mysqlclient庫文件當(dāng)中與MySQL_第4頁](http://file4.renrendoc.com/view/313cb62d3cc1a5d80266c90129139600/313cb62d3cc1a5d80266c901291396004.gif)
![編程實踐CAPIs包含在mysqlclient庫文件當(dāng)中與MySQL_第5頁](http://file4.renrendoc.com/view/313cb62d3cc1a5d80266c90129139600/313cb62d3cc1a5d80266c901291396005.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
MySQL_C_API編程實踐-writtenby1MySQLC CAPIs包含在mysq庫文件當(dāng)中,與MySQL的源代碼一塊,用于連接到數(shù)據(jù)int{ ret= t,if(mysql_library_init(0,NULL,NULL))fprintf(stderr,"couldnotinitializeMySQLlibrary\n");}MYSQL*mysql_real_connect(MYSQL*mysql,constchar*host,constchar*user,constchar*passwd,constchar*db,unsignedintport,constchar*unix_socket,unsignedlong_flag)unsignedintmysql_errno(MYSQL*mysql);constchar*mysql_error(MYSQL*mysql);connect=mysql_real_connect(&mysql,"localhost","root","123456","mydb2",0,NULL,0);if(connect==NULL){ret=printf("funcmysql_real_connect()err\n");returnret;}{printf(" }printf("connect:%d&mysql:%d\n",connect,&mysql);}MySQLmysq的開發(fā)頭文 為/usr/include/mysqlmysqgcc- dm01_o o.c-I/usr/include/mysql-L/usr/lib64/mysql .o):Infunction .c:(.text+0x31):undefinedreferenceto.c:(.text+0x4f):undefinedreferenceto//libmysql _globallookupundefinedreferencetodm01_o.c:49:警告:初始化將指針賦給整數(shù),未作類型轉(zhuǎn) ref. ality_v0]+0x0):undefinedreferenceto` - - - - - undefinedreferencesto`floor'followdm01_o.c:70:警告:初始化將指針賦給整數(shù),未作類型轉(zhuǎn)//導(dǎo)致沒有 .a(net_serv.cc.o):(.data.DW.ref.gxx_ ref.gxx_ ality_v0]+0x0):undefinedreferenceto`gxx_ MySQLGCCgcc- dm01_o o.c-I/usr/include/mysql-L/usr/lib64/mysql--ldl-lpthread-lm- -MySQLmakefileLFLAGS=-L/usr/lib64/mysql-lmysql-ldl-lpthread-lm-lrt-BIN=dm01_odm02_query$(CC) -c - $(CC)$(CFLAGS) $(LFLAGS)- $(CC)$(CFLAGS) $(LFLAGS)- rm-f*.o2MySQLCAPIMYSQLCAPI1MYSQL1MYSQL 通過調(diào)用mysql_library_init(),MYSQL 通過調(diào)用mysql_init()mysql_real_connect()連接 SQL 通過調(diào)用mysql_close()MYSQL 通過調(diào)用mysql_library_end()MYSQL初始化接句柄結(jié)#includeMYSQL*mysql_init(MYSQLMYSQL*mysql_real_connect(MYSQL*connection,constchar*server_host,constchar*sql_user_name,constchar*sql_password,constchar*db_name,unsignedintport_number,constchar*unix_socket_name,unsignedintIntmysql_options(MYSQLoption_to_set,constcharunsignedintmysql_errno(MYSQLmysqlAPI函數(shù)的錯誤代碼,該函數(shù)調(diào)用可SQLintmysql_query(MYSQL*mysql,constchar1SQL語句,而且不應(yīng)為語句添加終結(jié)分號或”\g”mysql_real_query返回上次語句所涉及到記錄的行對于成功檢索了數(shù)據(jù)的每個查詢,必須調(diào)用mysql_store_result()該函數(shù)將查詢的全部結(jié)果到客戶端,分配1個MYSQL_RES結(jié)構(gòu),并將 mit(MYSQL*mysql,my_bool函數(shù)說明如果模式為 啟動 mit模式;如果模式為0,mit模式 mit(MYSQL 不像mysql_store_result()那樣把結(jié)果集實際到客戶端。它必須通過CAPI開連接時,必須將標(biāo)志參數(shù)中的_MULTI_STATEMENTS選項指定給 。也可以通過調(diào)用api如果mysql指向的連接句柄。MYSQL*mysql_real_connect(MYSQL*mysql,constchar*host,constchar*user,constchar*passwd,constchar*db,unsignedintport,constchar*unix_socket,unsignedlong函數(shù)功能:MySQLconnect=mysql_real_connect(&mysql,"localhost","root","123456","mydb2",0,0intmysql_query(MYSQL*mysql,constcharintmysql_real_query(MYSQL*mysql,constchar*query,unsignedlongmysql_store_result()將查詢的全部結(jié)果到客戶端,分配1個MYSQL_RES結(jié)構(gòu),取結(jié)果集中的行,或調(diào)用mysql_row_seek()和mysql_row_l()來獲取或設(shè)置結(jié)果集一旦完成了對結(jié)果集的操作,必須調(diào)用 MYSQL_RES*mysql_use_result(MYSQL*mysql)不像mysql_store_result()那樣把結(jié)果集實際到客戶端。它必須通過1MySQL服務(wù)器,這需要使用mysql庫,MySQL的大多數(shù)客戶端API(除了3MySQL的函數(shù))中都會用到。MYSQL*mysql_init(MYSQL*mysql)constchar*user,constchar*passwd,constchar*db,unsignedintport,const*unix_socket,unsignedlong也可另式來進行連接。先用MYSQL_READ_DEFAULT_FILE作為選項名來調(diào)mysql_options(),再調(diào)用mysql_real_connect()來連接服務(wù)器;mysql_options(*mysql,MYSQL_READ_DEFAULT_FILE," mysql_real_connect(*mysql,NULL,NULL,NULL,NULL,0,NULL,0) f文件中記錄了連接MySQL服務(wù)器所需的各項參數(shù)(地址,端口,用戶名,密碼,數(shù)據(jù)庫,字符集,UnixSocket等。這樣可以靈活的修改連接參數(shù)而不必重新編譯voidmysql_close(MYSQL*mysql)4intmysql_query(MYSQL*mysql,constchar2)UPDATE,DELETEINSERTmysql_affected_rows()獲知受影響的記錄數(shù)。my_ulonglongmysql_affected_rows(MYSQL*mysql)。mysql_insert_idUPDATEINSERTmy_ulonglongmysql_insert_id(MYSQL3-1)式是通過mysql_store_result()將整個結(jié)果集全部取回來。MYSQL_RES*mysql_store_result(MYSQL*mysql)3-2)另式則是調(diào)用mysql_use_result()初始化獲取操作,但暫時不取回任何記錄。MYSQL_RES*mysql_use_result(MYSQL*mysql);3-3兩種方法均通過mysql_fetch_row()來每一條記錄MYSQL_ROWmysql_fetch_row(MYSQL_RES注意:若先前調(diào)用的是mysql_store_result(),則直接在本地記錄;若先前調(diào)用mysql_use_result(),則此時才到服務(wù)器上去獲取記錄。4)當(dāng)處理完結(jié)果集后,調(diào)用mysql__result()來釋放它所占的內(nèi)存。voidmysql__result(MYSQL_RES*result)。unsignedintmysql_errno(MYSQL*mysql)constchar*mysql_error(MYSQL*mysql)5.(PreparedMySQLCAPI還提供了另式來執(zhí)行SQL語句,即先預(yù)處理(prepare)再執(zhí)(execute).SQLMYSQL_STMT*mysql_stmt_init(MYSQL*mysql)intmysql_stmt_prepare(MYSQL_STMT*stmt,constchar*stmt_str,unsignedlongmy_boolmysql_stmt_bind_param(MYSQL_STMT*stmt,MYSQL_BIND*bind)TEXTBLOB, parameter_number,constchar*data,unsignedlonglength)intmysql_stmt_execute(MYSQL_STMTmy_ulonglongmysql_stmt_insert_id(MYSQL_STMT*stmt)來獲得被改變的記錄數(shù)和生my_ulonglongmysql_stmt_affected_rows(MYSQL_STMT*stmt)my_ulonglongmysql_stmt_insert_id(MYSQL_STMT*stmt)mysql_stmt_bind_result()對結(jié)果集中的字段進行綁定。my_boolmysql_stmt_bind_result(MYSQL_STMT*stmt,MYSQL_BIND*bind)intmysql_stmt_fetch(MYSQL_STMT*stmt)intmysql_stmt_store_result(MYSQL_STMT3-6,my_boolmysql_stmt_close(MYSQL_STMT*)APIunsignedintmysql_stmt_errno(MYSQL_STMT*stmt)constchar*mysql_stmt_error(MYSQL_STMT*stmt) MYSQLCAPI2.2節(jié),調(diào)用思路分析:5預(yù)處理語句(Prepared1.mysql_stmt_init()創(chuàng)建預(yù)處理語句句柄。要想在服務(wù)器上準(zhǔn)備預(yù)處理語句,mysql_stmt_prepare(SQL2.mysql_stmt_result_metadata()以獲得結(jié)果集元 如果語句生成了結(jié)果集,數(shù)據(jù)緩沖,通過調(diào) CAPI開連接時,必須將標(biāo)志參數(shù)中的_MULTI_STATEMENTS選項指定給 。也可以通過調(diào)用/*Connecttoserverwithoption mysql_real_connect(...,_MULTI_STATEMENTS);/*NowexecutemultiplequeriesINSERTINTOtest_tableUPDATEtest_tableSETid=20WHEREid=10;\SELECT*FROMtest_table;\{/*Processallresultsprintf("totalaffectedrows:%lld",if(!(result={printf(stderr,"Gotfatalerrorprocessingquery\n");}process_result_set(result);/*function*/}whileMYSQL_TIME結(jié)構(gòu)TIMESAMPCint{ret=0,status= mysqlmysql=mysql_real_connect(mysql,"localhost","root","123456","mydb2",0,NULL,_MULTI_STATEMENTS);if(mysql=={ret=printf("%s",printf("funcmysql_real_connect()err:%d\n",ret);returnret;}{printf(" } //////createtabletest_table(date_fielddate, time_fieldtime, timestamp);charquery[1024]="INSERTINTOtest_table(date_field,time_field,timestamp_field)if(!stmt){fprintf(stderr,"mysql_stmt_init(),outofmemory\n");}{fprintf(stderr,"\n%s",mysql_stmt_error(stmt));}/*setupinputbuffersforall3parameters*/bind[0].buffer_type=MYSQL_TYPE_DATE;bind[0].buffer=(char*)&ts;bind[0].is_null=bind[0].length=bind[1]=bind[2]=/*supplythedatatobesentinthetsstructure*/ts.year=2002;ts.month=ts.day=ts.hour=ts.minute=ts.second=//Closethestatementif{fprintf(stderr,"failedwhileclosingthestatement\n");fprintf(stderr,"%s\n",mysql_stmt_error(stmt));}}2.5MYSQL默認是自動提交的,也就是你提交一個QUERY,它就直接執(zhí)行!我們可以通過 mit=1mysqlINNODBMYISAM#define #define #defineUNSET_TRAN #defineCOMMIT_TRAN #define {intret=ret=mysql_query(mysql,BEGIN_TRAN);if(ret!=0){printf("funcmysql_query()err:%d\n",ret);returnret;}ret=mysql_query(mysql,SET_TRAN);if(ret!=0){printf("funcmysql_query()err:%d\n",ret);returnret;}return}{intret=ret=mysql_query(mysql,ROLLBACK_TRAN);if(ret!=0){printf("funcmysql_query()err:%d\n",ret);returnret;}ret=mysql_query(mysql,if(ret!={printf("funcmysql_query()err:%d\n",ret);returnret;}return} mit(MYSQL{intret=ret=mysql_query(mysql,COMMIT_TRAN);if(ret!=0){printf("funcmysql_query()err:%d\n",ret);returnret;}ret=mysql_query(mysql,UNSET_TRAN);if(ret!=0){printf("funcmysql_query()err:%d\n",ret);returnret;}return}#definesql01"INSERTINTOtest_table(col1,col2,col3)VALUES(10,'10','1')"#definesql02"INSERTINTOtest_table(col1,col2,col3)VALUES(20,'20','2')"#definesql03"INSERTINTOtest_table(col1,col2,col3)VALUES(30
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 交通事故和解合同范本
- 產(chǎn)品采購合同范本
- 中小企業(yè)合同法務(wù)服務(wù)發(fā)展規(guī)劃定
- 個人商用房抵押貸款合同模板
- 產(chǎn)品銷售獨家代理合同模板
- 個人向單位租車合同及條款
- 個人向個人創(chuàng)業(yè)借款合同范本
- 臨時工勞動合同范本(合同僅限勞務(wù)派遣使用)
- 個人住宅抵押借款合同簡例范本
- 兼職人員勞務(wù)合同協(xié)議
- 2025江蘇南京市金陵飯店股份限公司招聘高頻重點提升(共500題)附帶答案詳解
- 公共政策分析 課件匯 陳振明 第0-9章 導(dǎo)論、緒論:政策科學(xué)的“研究綱領(lǐng)”- 政策監(jiān)控
- 2025年牛津譯林版英語七年級下冊全冊單元重點知識點與語法匯編
- 《小學(xué)作文指導(dǎo)》課件
- 小學(xué)六年級數(shù)學(xué)方程應(yīng)用題100道及答案解析
- 2025新譯林版英語七年級下單詞表
- 海洋工程設(shè)備保溫保冷方案
- 文藝演出排練指導(dǎo)服務(wù)合同
- 人教版(2024新版)一年級上冊數(shù)學(xué)第一單元《數(shù)學(xué)游戲》單元整體教學(xué)設(shè)計
- 中山大學(xué)孫逸仙紀(jì)念醫(yī)院醫(yī)用耗材試用登記表【模板】
- 衛(wèi)生部關(guān)于發(fā)布《綜合醫(yī)院組織編制原則試行草案》的通知((78)衛(wèi)醫(yī)字第1689號)
評論
0/150
提交評論