cc經(jīng)典代碼數(shù)據(jù)庫連接_第1頁
cc經(jīng)典代碼數(shù)據(jù)庫連接_第2頁
cc經(jīng)典代碼數(shù)據(jù)庫連接_第3頁
cc經(jīng)典代碼數(shù)據(jù)庫連接_第4頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、C/C+連接數(shù)據(jù)庫一、連接方法1.添加頭文件和庫文件頭文件添加方法 : 項(xiàng)目配置屬性C/C+常規(guī)”,在 “附加包含目錄中加入頭文件所在的文件夾(添加路徑是:C:Program Files 2.庫文件添加方式:“項(xiàng)目配置屬性Server 5.6include)器常規(guī)”,在 “附加庫目錄”中加入 LIB 所在目錄(添加路徑是:C:ProgramFilesServer 5.6lib)3.添加庫文件的附加依賴項(xiàng)依次點(diǎn)擊“項(xiàng)目配置屬性器輸入”,在“附加依賴項(xiàng)”中加入 lib.lib中取出數(shù)據(jù)的 API 介紹二、連接和從的 API 接口:_affected_rows() 返回被附的 UPDATE, DEL

2、ETE 或 INSERT 查詢影響的行數(shù)。_close() 關(guān)閉一個服務(wù)器連接。_connect() 連接一個;使用_real_connect()代替。服務(wù)器。該函數(shù)不_change_user() 改變在一個打開的連接上的用戶和數(shù)據(jù)庫。_create_db() 創(chuàng)建一個數(shù)據(jù)庫。該函數(shù)不;而使用 SQL 命令 CREATE DATABASE。_data_seek() 在一個查詢結(jié)果集合中搜尋一任意行。_debug() 用給定字符串做一個 DBUG_PUSH。_drop_db() 拋棄一個數(shù)據(jù)庫。該函數(shù)不;而使用 SQL 命令 DROP DATABASE。_dump_debug_info() 讓服

3、務(wù)器將調(diào)試信息寫入日志文件。_eof() 確定是否已經(jīng)讀到一個結(jié)果集合的最后一行。這功能被;_errno()或_error()可以相反被使用。_errno() 返回最近被調(diào)用的_error() 返回最近被調(diào)用的函數(shù)的出錯。函數(shù)的出錯消息。_esc_string() 用在 SQL 語句中的字符串的轉(zhuǎn)義特殊字符。_fetch_field() 返回下一個表字段的類型。_fetch_field_direct () 返回一個表字段的類型,給出一個字段_fetch_fields() 返回一個所有字段結(jié)構(gòu)的數(shù)組。_fetch_lengths() 返回當(dāng)前行中所有列的長度。_fetch_row() 從結(jié)果集合

4、中取得下一行。_field_seek() 把列光標(biāo)放在一個指定的列上。_field_count() 返回最近查詢的結(jié)果列的數(shù)量。_field_ l() 返回用于最后一個_fetch_field()的字段光標(biāo)的位置。_free_result()一個結(jié)果集合使用的內(nèi)存。_get_c nt_info() 返回客戶版本信息。_get_host_info() 返回一個描述連接的字符串。_get_proto_info() 返回連接使用的協(xié)議版本。_get_server_info() 返回服務(wù)器版本號。_info() 返回關(guān)于最近執(zhí)行得查詢的信息。_init() 獲得或初始化一個結(jié)構(gòu)。_insert_id(

5、) 返回有前一個查詢?yōu)橐粋€ AUTO_INCREMENT 列生成的 ID。_kill() 殺死一個給定的線程。_list_dbs() 返回匹配一個簡單的正則表達(dá)式的數(shù)據(jù)庫名。_list_fields() 返回匹配一個簡單的正則表達(dá)式的列名。_list_proses() 返回當(dāng)前服務(wù)器線程的一張表。_list_tables() 返回匹配一個簡單的正則表達(dá)式的表名。_num_fields() 返回一個結(jié)果集合重的列的數(shù)量。_num_rows() 返回一個結(jié)果集合中的行的數(shù)量。_options() 設(shè)置對_connect()的連接選項(xiàng)。_() 檢查對服務(wù)器的連接是否正在工作,必要時重新連接。_que

6、ry() 執(zhí)行指定為一個空結(jié)尾的字符串的 SQL 查詢。_real_connect() 連接一個服務(wù)器。_real_query() 執(zhí)行指定為帶計(jì)數(shù)的字符串的 SQL 查詢。_reload() 告訴服務(wù)器重裝表。_row_seek() 搜索在結(jié)果集合中的行,使用從_row_row_ l() 返回行光標(biāo)位置。_select_db() 連接一個數(shù)據(jù)庫。_shutdown() 關(guān)掉數(shù)據(jù)庫服務(wù)器。_s () 返回作為字符串的服務(wù)器狀態(tài)。_store_result() 檢索一個完整的結(jié)果集合給客戶。_thread_id() 返回當(dāng)前線程的 ID。_use_result() 初始化一個一行一行地結(jié)果集合的

7、檢索。l()返回的值。2.1_real_connect()2.1.1函數(shù)原型:*_real_connect(*, const char *host, const char *user, const char *passwd, constchar *db, unsignedport, const char *unix_socket, unsignedc nt_flag)2.1.2 參數(shù)說明:第一個參數(shù)應(yīng)該是一個現(xiàn)存結(jié)構(gòu)。見下面的例子。結(jié)構(gòu)的地址。在調(diào)用_real_connect()之前,你必須調(diào)用_init()初始化host 值可以是一個主機(jī)名或一個 IP 地址。如果 host 是 NULL 或

8、字符串localhost,假定是到本OS 支持套接字(Unix)或命名管道(Win32),使用他們而不是 TCP/IP 與服務(wù)器連接。機(jī)的接。如果user 參數(shù)包含用戶的登錄 ID。如果 user 是 NULL,假定是當(dāng)前用戶。在 Unix 下,它是當(dāng)前登錄名。在 WindowsODBC 下,必須明確地指定當(dāng)前用戶名字。見 16.4 怎樣填寫 ODBC 管理程序中各種域。passwd 參數(shù)為 user 包含口令。如果 passwd 是 NULL,只有在 user 表中對于有一個空白口令字段的用戶的條目將被檢查一個匹配。這允許數(shù)據(jù)庫主管設(shè)置權(quán)限,使用戶獲得不同的口令,取決于他們是否已經(jīng)指定一個口

9、令。注意:不要試圖在調(diào)用_real_connect()前加密口令;口令加密自動被客戶 API 處理。db 是數(shù)據(jù)庫名。如果 db 不是 NULL,連接將缺省數(shù)據(jù)庫設(shè)置為這個值。如果 port 不是 0,值對于 TCP/IP 連接將用作端。注意 host 參數(shù)決定連接的類型。如果 unix_socket 不是 NULL,字符串指定套接字或應(yīng)該被使用名管道。注意 host 參數(shù)決定連接的類型。c nt_flag 值通常是 0,但是在很特殊的情況下可以被設(shè)置為下列標(biāo)志的組合:標(biāo)志名字 意味著的標(biāo)志CNT_FOUND_ROWS 返回找到的(匹配的)行數(shù),不是受到影響的行數(shù)。CNT_NO_SCHEMA

10、不允許 db_name.tbl_name.col_name 語法。這是為了 ODBC;如果你使用該語法,導(dǎo)致語法分析器產(chǎn)生一個錯誤,它是為在一些 ODBC 程序捕捉錯誤是有用的。PRESS 使用壓縮協(xié)議。CNT_ODBC 客戶是一個 ODBC 客戶。這使d 變得對 ODBC 更友好。2.1.3 返回值*連接句柄。如果連接失敗,NULL。對一個成功的連接,返回值與第一個參數(shù)值相同,除非你傳如果連接成功,一個遞 NULL 給該參數(shù)。2.1.4 錯誤CR_CONN_HOST_ERROR不能連接服務(wù)器。CR_CONNECTION_ERROR不能連接本地服務(wù)器。CR_IPSOCK_ERROR不能創(chuàng)建一個

11、 IP 套接字。CR_OUT_OF_MEMORY內(nèi)存溢出。CR_SOCKET_CREATE_ERROR不能創(chuàng)建一個 Unix 套接字。CR_UNKNOWN_HOST不能找到主機(jī)名的 IP 地址。CR_VER_ERROR由于試圖使用一個不同協(xié)議版本的一個客戶庫與一個服務(wù)器連接導(dǎo)致的一個協(xié)議失配。如果你使用一個非常老的客戶庫連接一個沒有使用-old-protocol 選項(xiàng)啟動的新服務(wù)器,這就能發(fā)生。CR_NAMEDPIPEOPEN_ERROR;不能在 Win32 上創(chuàng)建一個命名管道。CR_NAMEDPIPEWAIT_ERROR;不能在 Win32 上等待一個命名管道。CR_NAMEDPIPESET

12、SE_ERROR;不能在 Win32 上得到一個管道處理器。2.2_select_db()2.2.1 函數(shù)原型_select_db(*, const char *db)2.2.2 參數(shù)說明使得由 db 指定的數(shù)據(jù)庫成為 在由指定的連接上的缺省(當(dāng)前)數(shù)據(jù)庫。在隨后的查詢中,這個數(shù)據(jù)庫對于不包括一個顯式的數(shù)據(jù)庫指定符的表的是缺省數(shù)據(jù)庫。除非連接的用戶能被認(rèn)證允許使用數(shù)據(jù)庫,否則_select_db()失敗。2.2.3 返回值成功,零。如果發(fā)生一個錯誤,非零。2.2.4 錯誤MANDS_OUT_OF_SYNC命令以一個不適當(dāng)?shù)拇涡虮粓?zhí)行。CR_SERVER_GONE_ERROR服務(wù)器關(guān)閉了。CR_

13、SERVER_LOST對服務(wù)器的連接在查詢期間失去。CR_UNKNOWN_ERROR發(fā)生一個未知的錯誤。2.3_real_query2.3.1 函數(shù)原型_real_query(*, const char *query, unsignedlength)2.3.2 參數(shù)說明執(zhí)行由 query 指向的 SQL 查詢,它應(yīng)該是一個 length 個字節(jié)的字符串。查詢必須由一個單個的 SQL 語句組成。你不應(yīng)該在語句后增加一個終止的分號(“;”)或g。_real_query()而不是_query(),因?yàn)槎M(jìn)制代碼數(shù)據(jù)可能包含“0”對于包含二進(jìn)制數(shù)據(jù)的查詢,你必須使用字符,而且,_real_query(

14、)比_query()更快,因?yàn)樗鼘Σ樵冏址{(diào)用 strlen()。2.3.3 返回值如果查詢成功,零。如果發(fā)生一個錯誤,非零。2.3.4 錯誤MANDS_OUT_OF_SYNC命令以一個不適當(dāng)?shù)拇涡虮粓?zhí)行。CR_SERVER_GONE_ERROR服務(wù)器關(guān)閉了。CR_SERVER_LOST對服務(wù)器的連接在查詢期間失去。CR_UNKNOWN_ERROR發(fā)生一個未知的錯誤。2.4_store_result2.4.1 函數(shù)原型_RES *_store_result(*)2.4.2 返回值_RES result structure with the results. NULL (0) if an er

15、ror occurred.A2.5Description_fetch_row()Retrieves the next row of a result set. When used_store_result(),_fetch_row() returns NULL when there are no more rowsafter_use_result(),_fetch_row() returns NULL whento retrieve. When used afterthere are no more rows to retrieve or if an error occurred._num_f

16、ields(result). If row holds the returnThe number of valuesvalue from a call to as row0 to rowby NULL po ers.he row is given by_fetch_row(), po ers to the values are acsed_num_fields(result)-1. NULL valueshe row are indicated_fetch_lengths(). EmptyThe lengths of the field valueshe row may be obtained

17、 by callingfields and fields containing NULL both have length 0; you can distinguish these by checking the po er for thefield value. If the po er is NULL, the field is NULL; otherwise, the field is empty.Return Values_ROW structure for the next row. NULL if there are no more rows to retrieve or if a

18、n error occurred.AErrors_fetch_row()Notet error is not reset betn calls toCR_SERVER_LOSTThe connection to the server was lost during the query.參考資料:ht/doc/refman/5.6/en/index.html三、利用庫提供的 API 編寫連接和從中取出數(shù)據(jù)的代碼1: #include 2: #include stdio.h3: #include winsock.h 4: #include .h 5:6:7:main()8: 9:10:* con;

19、 /=_init(*) 0); 11:_RES *res;12:_ROW row;13:14:15: char tmp400;16:17: /database configuartion18: char dbuser30=root;19: char dbpasswd30=apple; 20: char d 30=localhost; 21: char dbname50=excel;22: char tablename50=test;23: char *query=NULL;24:25:26:x;27:y;28:rt;/return value29: unsignedt;30:31:count

20、= 0;32:33:34: prf(input x,yn);35: scanf(%d,%d,&x,&y);36: fflush(stdin);37: prf(input overn);38: con =_init(*) 0);CR_UNKNOWN_ERRORAn unknown error occurred.39:40:41:if ( con !=NULL &_real_connect(con,d,dbuser,dbpasswd,dbname,3306/*TCP IP端口*/,NULL/*UnixSocket 連接類型*/,0/*運(yùn)行成 ODBC 數(shù)據(jù)庫標(biāo)志*/)42:43:44:45:46:

21、47:48:49:50:51:52:53:54:55:query: 56:57:58:59:60:61:62:63:64:65:66:67:if(!_select_db(con,dbname)prf(Select sucsfully the database!n);con-reconnect = 1;query/= set names GBK;_query(con,set names GBK);rt=if (rt)pr!n,elsepr_real_query(con,query,strlen(query);f(Error making_error(con);%sf(query %cceed!n

22、,query);elseMessageBoxA(NULL,Unable to connect the database,checkyour68:69:70:71:configuration!,NULL);f(tmp,update %s set 商品=%s,賣出=%d,成交/spr=%d,漲跌=%d,買進(jìn)=%d,總量=%d,漲幅=%f,時間=%swhere%s,tablename,goods,sold,deal,fluctuate,buy,total,delta,time,UpdateCon);72:sprf(tmp,inserto %svalues(%s,%d,%d),tablename,nu

23、ll,x,y); /注意如何向具有自增字段的數(shù)據(jù)庫中73:/MessageBoxA(NULL,tmp,tmp,MB_OK);74:75:76:77:78:79:query: 80:81:82:83:84:85:86:87:88:89:90:91:query: 92:93:94:95:96:97:98:中99:100:101:102:103:/_query(con,tmp);rt=if (rt)pr!n,elsepr_real_query(con,tmp,strlen(tmp);f(Error making_error(con);%sf(%s executed!n,tmp);sprf(tmp,s

24、elect * from %s,tablename);rt=if (rt)pr!n,elsepr_real_query(con,tmp,strlen(tmp);f(Error making_error(con);%sf(%s executed!n,tmp);_store_result(con);/將結(jié)果保存在res 結(jié)構(gòu)體res =while(row =/*_fetch_row(res)*_ROWSTDCALL_fetch_row(_RES*result);104:105:106:107:108:109:110:111:112:113:* 檢索行*/for(t=0;t_num_fields(r

25、es);t+)prf(%s ,rowt);prf(n);count +;114:115:116:117:118:119:120:121:prprf(number of rows %dn,count);f(_free_result.n);_free_result(res);_close(con);return0;四、運(yùn)行結(jié)果五、數(shù)據(jù)庫/*NavicatDaransferSourSour Source Sourceervererver Host: localhost: 50141: localhost:3306: excelVerDatabaseServerServer File Encoding

26、TypeVer: 50141: 65001Date:*/2011-09-23 10:41:431: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:29:SET FOREIGN_KEY_CHECKS=0;- Table structure for test-DROP TABLE IF EXISTS test;CREATE TABLE test (xyzbig(4) NOT NULL AUTO_INCREMENT,(4) DEFAULT NULL,(4) DEFAULT NULL,PRIMARY KE

27、Y (x) ENGINE=InnoDB AUTO_INCREMENT=118 DEFAULT CHARSET=latin1;- Records of test-INSERTINSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERTOO O O O O O O O O O O O OtesttesttesttesttesttesttesttesttesttesttesttesttesttestVALUESVALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES VALUES(95,(96,(97,(98,(99,(100,(101,(102,(103,(104,(105,(106,(107,(108,12432, 4334);213,213,123,321,321);213);231);231);123

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論