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

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論