編程實(shí)踐CAPIs包含在mysqlclient庫(kù)文件當(dāng)中與MySQL_第1頁(yè)
編程實(shí)踐CAPIs包含在mysqlclient庫(kù)文件當(dāng)中與MySQL_第2頁(yè)
編程實(shí)踐CAPIs包含在mysqlclient庫(kù)文件當(dāng)中與MySQL_第3頁(yè)
編程實(shí)踐CAPIs包含在mysqlclient庫(kù)文件當(dāng)中與MySQL_第4頁(yè)
編程實(shí)踐CAPIs包含在mysqlclient庫(kù)文件當(dāng)中與MySQL_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

MySQL_C_API編程實(shí)踐-writtenby1MySQLC CAPIs包含在mysq庫(kù)文件當(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的開(kāi)發(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ù),未作類(lèi)型轉(zhuǎn) ref. ality_v0]+0x0):undefinedreferenceto` - - - - - undefinedreferencesto`floor'followdm01_o.c:70:警告:初始化將指針賦給整數(shù),未作類(lèi)型轉(zhuǎn)//導(dǎo)致沒(méi)有 .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 通過(guò)調(diào)用mysql_library_init(),MYSQL 通過(guò)調(diào)用mysql_init()mysql_real_connect()連接 SQL 通過(guò)調(diào)用mysql_close()MYSQL 通過(guò)調(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ù)的錯(cuò)誤代碼,該函數(shù)調(diào)用可SQLintmysql_query(MYSQL*mysql,constchar1SQL語(yǔ)句,而且不應(yīng)為語(yǔ)句添加終結(jié)分號(hào)或”\g”mysql_real_query返回上次語(yǔ)句所涉及到記錄的行對(duì)于成功檢索了數(shù)據(jù)的每個(gè)查詢(xún),必須調(diào)用mysql_store_result()該函數(shù)將查詢(xún)的全部結(jié)果到客戶(hù)端,分配1個(gè)MYSQL_RES結(jié)構(gòu),并將 mit(MYSQL*mysql,my_bool函數(shù)說(shuō)明如果模式為 啟動(dòng) mit模式;如果模式為0,mit模式 mit(MYSQL 不像mysql_store_result()那樣把結(jié)果集實(shí)際到客戶(hù)端。它必須通過(guò)CAPI開(kāi)連接時(shí),必須將標(biāo)志參數(shù)中的_MULTI_STATEMENTS選項(xiàng)指定給 。也可以通過(guò)調(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()將查詢(xún)的全部結(jié)果到客戶(hù)端,分配1個(gè)MYSQL_RES結(jié)構(gòu),取結(jié)果集中的行,或調(diào)用mysql_row_seek()和mysql_row_l()來(lái)獲取或設(shè)置結(jié)果集一旦完成了對(duì)結(jié)果集的操作,必須調(diào)用 MYSQL_RES*mysql_use_result(MYSQL*mysql)不像mysql_store_result()那樣把結(jié)果集實(shí)際到客戶(hù)端。它必須通過(guò)1MySQL服務(wù)器,這需要使用mysql庫(kù),MySQL的大多數(shù)客戶(hù)端API(除了3MySQL的函數(shù))中都會(huì)用到。MYSQL*mysql_init(MYSQL*mysql)constchar*user,constchar*passwd,constchar*db,unsignedintport,const*unix_socket,unsignedlong也可另式來(lái)進(jìn)行連接。先用MYSQL_READ_DEFAULT_FILE作為選項(xiàng)名來(lái)調(diào)mysql_options(),再調(diào)用mysql_real_connect()來(lái)連接服務(wù)器;mysql_options(*mysql,MYSQL_READ_DEFAULT_FILE," mysql_real_connect(*mysql,NULL,NULL,NULL,NULL,0,NULL,0) f文件中記錄了連接MySQL服務(wù)器所需的各項(xiàng)參數(shù)(地址,端口,用戶(hù)名,密碼,數(shù)據(jù)庫(kù),字符集,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)式是通過(guò)mysql_store_result()將整個(gè)結(jié)果集全部取回來(lái)。MYSQL_RES*mysql_store_result(MYSQL*mysql)3-2)另式則是調(diào)用mysql_use_result()初始化獲取操作,但暫時(shí)不取回任何記錄。MYSQL_RES*mysql_use_result(MYSQL*mysql);3-3兩種方法均通過(guò)mysql_fetch_row()來(lái)每一條記錄MYSQL_ROWmysql_fetch_row(MYSQL_RES注意:若先前調(diào)用的是mysql_store_result(),則直接在本地記錄;若先前調(diào)用mysql_use_result(),則此時(shí)才到服務(wù)器上去獲取記錄。4)當(dāng)處理完結(jié)果集后,調(diào)用mysql__result()來(lái)釋放它所占的內(nèi)存。voidmysql__result(MYSQL_RES*result)。unsignedintmysql_errno(MYSQL*mysql)constchar*mysql_error(MYSQL*mysql)5.(PreparedMySQLCAPI還提供了另式來(lái)執(zhí)行SQL語(yǔ)句,即先預(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)來(lái)獲得被改變的記錄數(shù)和生my_ulonglongmysql_stmt_affected_rows(MYSQL_STMT*stmt)my_ulonglongmysql_stmt_insert_id(MYSQL_STMT*stmt)mysql_stmt_bind_result()對(duì)結(jié)果集中的字段進(jìn)行綁定。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ù)處理語(yǔ)句(Prepared1.mysql_stmt_init()創(chuàng)建預(yù)處理語(yǔ)句句柄。要想在服務(wù)器上準(zhǔn)備預(yù)處理語(yǔ)句,mysql_stmt_prepare(SQL2.mysql_stmt_result_metadata()以獲得結(jié)果集元 如果語(yǔ)句生成了結(jié)果集,數(shù)據(jù)緩沖,通過(guò)調(diào) CAPI開(kāi)連接時(shí),必須將標(biāo)志參數(shù)中的_MULTI_STATEMENTS選項(xiàng)指定給 。也可以通過(guò)調(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默認(rèn)是自動(dòng)提交的,也就是你提交一個(gè)QUERY,它就直接執(zhí)行!我們可以通過(guò) 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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論