青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

興海北路

---男兒仗劍自橫行
<2008年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

統(tǒng)計

  • 隨筆 - 85
  • 文章 - 0
  • 評論 - 17
  • 引用 - 0

常用鏈接

留言簿(6)

隨筆分類

隨筆檔案

收藏夾

全是知識啊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

基于C API的MySQL數(shù)據(jù)庫多線程訪問方法
摘要:目前,數(shù)據(jù)庫在各行各業(yè)中廣泛應用。在眾多商業(yè)數(shù)據(jù)庫軟件中,SQL SERVER 和ORACLE被較多的使用,因此這兩個數(shù)據(jù)庫軟件的價格也較昂貴。本文主要介紹MySQL數(shù)據(jù)庫在單線程或多線程程序環(huán)境下使用C API訪問MySQL數(shù)據(jù)庫方法,并給出了相應代碼和分析。該數(shù)據(jù)庫屬于開源數(shù)據(jù)庫,具有較高的成熟度,并且對于社區(qū)版本可以免費使用,因此對于需要使用 C API訪問數(shù)據(jù)庫的項目開發(fā),可降低開發(fā)成本。
  關鍵詞:MySQL;C API;多線程
  中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2007)16-30904-02
  Based on C API MySQL Database Multi-threaded Access Methods
  YU Cheng-gong
  (Zhejiang Pharmaceutical College,Ningbo 315100,China)
  Abstract:Currently,the database in all walks of life were widely used.In many commercial database software,SQL Server and Oracle are used more and therefore their prices are more expensive. This paper describes the MySQL database in single-threaded or multi-threaded programming environment using C API access to the MySQL database, and gives the corresponding code and analysis. The database is open source database, with a higher maturity level, and the community version can be used for free. It satisfies the need to use the C API access to the database of project development, and reduces development costs.
  Key words:MySQL;C API;multi-threaded

  1 引言

  隨著社會信息化的深入,數(shù)據(jù)庫在社會各個領域被廣泛應用。在這些數(shù)據(jù)庫應用項目開發(fā)過程中,需要做兩方面的決策:1. 使用何種數(shù)據(jù)庫軟件;2. 采用何種方式訪問數(shù)據(jù)庫。數(shù)據(jù)庫軟件的選擇面比較寬,在目前眾多商業(yè)數(shù)據(jù)庫軟件中,SQL SERVER 和ORACLE被較多的使用,當然這兩個數(shù)據(jù)庫軟件的價格也較昂貴,本文選擇可免費使用的MySQL數(shù)據(jù)庫社區(qū)版本,MySQL庫屬于開源數(shù)據(jù)庫,具有較 高的成熟度和可靠性。數(shù)據(jù)庫的訪問方式有很多,可以使用ODBC、DAO、ADO等方法,這些方法簡單直接但是效率不高,不適合大型復雜的系統(tǒng)使用,例如 網(wǎng)絡游戲的數(shù)據(jù)庫系統(tǒng)開發(fā)需要考慮同時大量的數(shù)據(jù)庫訪問,因此訪問的效率非常重要。基于C程序語言的高效率,使用C API訪問數(shù)據(jù)庫可以提高數(shù)據(jù)庫的訪問效率。基于以上兩點,本文將介紹基于C API的MySQL數(shù)據(jù)庫訪問方法,給出在單線程和多線程程序環(huán)境下的具體代碼和分析。

  2 建表

  為了方便說明數(shù)據(jù)庫的訪問,先建立一個數(shù)據(jù)庫表TestTable,可以使用SQL語句創(chuàng)建該表,也可以使用MySQL提供的圖形界面來創(chuàng)建。數(shù)據(jù)庫表中字段如下:
  該數(shù)據(jù)庫表使用最常見的用戶名和密碼作為字段,本文將通過該表來實現(xiàn)不同程序環(huán)境下基于C API的數(shù)據(jù)庫的訪問方法。

  3 單線程程序的數(shù)據(jù)庫訪問

  單線程應用程序訪問MySQL數(shù)據(jù)庫相對簡單,其過程包含以下幾步:
  (1)初始化MySQL庫
  (2)初始化數(shù)據(jù)庫連接句柄
  (3)連接數(shù)據(jù)庫
  (4)通過SQL語句操作數(shù)據(jù)庫并處理相應數(shù)據(jù)
  (5)關閉數(shù)據(jù)庫連接
  (6)結束MySQL庫
  通過這五個步驟即可實現(xiàn)數(shù)據(jù)庫的訪問,具體代碼和分析如下:
  //在main主函數(shù)中添加代碼
  //1.定義訪問數(shù)據(jù)庫所需變量
  MYSQL * myData;
  MYSQL_RES * res;
  MYSQL_ROW row;
  //2. 初始化MySQL庫和數(shù)據(jù)庫連接句柄
  myData = mysql_init((MYSQL*) 0);
  //3. 連接數(shù)據(jù)庫,MYSQL_IP和MYSQL_PORT表示數(shù)據(jù)庫的IP和端口
  // MYSQL_ACCOUNT, MYSQL_PASSWORD表示數(shù)據(jù)庫連接的帳號和密碼
  //MYSQL_DBNAME表示所要訪問的數(shù)據(jù)庫名
  mysql_real_connect( myData, MYSQL_IP, MYSQL_ACCOUNT, MYSQL_PASSWORD, MYSQL_DBNAME, MYSQL_PORT,NULL, 0 )
  //4. 通過SQL語句操作數(shù)據(jù)庫并處理相應數(shù)據(jù)
  //4.1新建用戶名為abcdef,密碼為123456的記錄
  mysql_query(myData, "insert into TestTable value(‘abcdef’,’ 123456’)");
  //4.2顯示所有記錄
  //查詢所有記錄
  mysql_query(myData, "select * from TestTable");
  //將查詢結果保存到res中
  res = mysql_store_result( myData ) ;
  //逐條顯示記錄
  Int j = 0;
  while ( row = mysql_fetch_row( res ) ) {//獲取一條記錄
  j = mysql_num_fields( res ) ;//獲取每條記錄的字段數(shù)
for ( k = 0 ; k < j ; k++ )
  printf( “%s”, row[k] ) ;
  printf( “\n”) ;
  }
  //釋放res
  mysql_free_result( res ) ;
  //5. 關閉數(shù)據(jù)庫連接
  mysql_close( myData );
  //6. 結束MySQL庫
  mysql_library_end();
  關于代碼的幾點說明:
  (1)定義變量中的三個數(shù)據(jù)結構為訪問MySQL所需,MYSQL結構表示一個數(shù)據(jù)庫連接的句柄,其中包含了數(shù)據(jù)庫連接所需的參數(shù),MYSQL_RES結構表示數(shù)據(jù)庫訪問中一個查詢的返回結果,MYSQL_ROW結構表示返回結構中的一條記錄;
  (2)獲取查詢結果res并處理完畢,必須釋放res,否則會造成內存泄露
  (3)在單線程時,步驟初始化MySQL庫和數(shù)據(jù)庫連接句柄可合并, 由mysql_init()來處理。該函數(shù)會自動調用函數(shù)mysql_library_init()來初始化MySQL庫,同時初始化連接句柄。

  4 多線程環(huán)境下的數(shù)據(jù)庫訪問

  多線程環(huán)境下的數(shù)據(jù)庫訪問需要保證線程安全。Windows版本的MySQL C API函數(shù)都是線程安全的,除了mysql_library_init(),而我們剛才的代碼中使用的mysql_init()函數(shù)會自動調用函數(shù) mysql_library_init()來初始化MySQL庫,因此在多線程環(huán)境下,需要不同的初始化代碼和清理代碼。具體過程如下:
  (1)在主函數(shù)中調用mysql_library_init()來初始化MySQL庫;
  (2)啟動各數(shù)據(jù)庫訪問線程
  (3)主函數(shù)等待各個線程的結束
  (4)調用mysql_library_end ()清理MySQL庫。
  其中數(shù)據(jù)庫訪問線程的代碼和單線程數(shù)據(jù)庫訪問代碼類似,但是需要如下變化:
  (1)單線程中的第2步初始化MySQL庫和數(shù)據(jù)庫連接句柄,不能再使用mysql_init(),代碼應作如下修改:
  //初始化線程
  my_init();
  mysql_thread_init();
  //初始化myData
  myData = malloc(sizeof(MYSQL));
  memset(&myData, 0, sizeof(MYSQL))
  (2)上述初始化myData,只是將myData所有成員設為0,如果有需要可以根據(jù)具體情況設置該結構成員的值,例myData->reconnect= 1,其作用是設置數(shù)據(jù)庫連接屬性為重連接,即當數(shù)據(jù)庫連接斷開時,自動重新連接;
  (3)單線程中的第6步不在需要,改為結束線程的清理工作,即調用mysql_thread_end()函數(shù)。

  5 總結

  綜上所述,使用C API訪問MySQL數(shù)據(jù)庫在不同線程環(huán)境下的區(qū)別主要在于初始化和訪問結束后清理代碼,也就是說除了初始化和清理代碼,MySQL提供給我們的C API函數(shù)都是線程安全的。最后需要有一點說明,使用C API訪問數(shù)據(jù)庫可以提高數(shù)據(jù)庫的訪問效率,但并不是所有的數(shù)據(jù)庫項目都適合這種方式,該方式適合需要大量實時并發(fā)處理的數(shù)據(jù)庫項目,例如網(wǎng)絡游戲的數(shù)據(jù) 庫項目,對于有此需求的數(shù)據(jù)庫項目可參考本文。

  參考文獻:
  [1]MySQL AB,MySQL 5.0 Reference Manual.

  注:“本文中所涉及到的圖表、公式注解等形式請以PDF格式閱讀原文。”

posted on 2008-04-22 16:35 隨意門 閱讀(5052) 評論(1)  編輯 收藏 引用

評論

# re: 基于C API的MySQL數(shù)據(jù)庫多線程訪問方法 2013-11-26 14:00 ysw

memset(&myData, 0, sizeof(MYSQL))
應該為: memset(myData, 0, sizeof(MYSQL))
  回復  更多評論    
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美国产日韩xxxxx| 在线精品视频免费观看 | 亚洲欧洲综合另类| 欧美在线观看视频一区二区三区| 亚洲一级一区| 性欧美8khd高清极品| 久久精品国产v日韩v亚洲| 久久久久88色偷偷免费| 免费一级欧美片在线观看| 亚洲国产精品久久久久婷婷老年 | 亚洲欧美伊人| 久久精品30| 免费日韩一区二区| 亚洲美女尤物影院| 午夜一区二区三区在线观看| 久久久国产精品一区| 欧美激情亚洲激情| 国产精品久久久久久久久久久久久 | 久久精品日产第一区二区三区| 欧美aaaaaaaa牛牛影院| 日韩一本二本av| 久久久久一区| 国产精品久久久久久久浪潮网站| 狠狠色狠狠色综合人人| 一区二区三欧美| 久久裸体艺术| 一区二区三区视频观看| 久热精品视频在线免费观看| 国产精品美女久久久久久久| 亚洲国产精品尤物yw在线观看| 亚洲男女自偷自拍图片另类| 欧美国产一区视频在线观看| 亚洲欧美国产精品专区久久| 欧美激情一区在线| 激情六月婷婷久久| 久久er精品视频| 在线视频中文亚洲| 欧美激情在线观看| 亚洲二区免费| 久久久久久91香蕉国产| 亚洲图片欧美一区| 欧美日韩亚洲91| 亚洲精选久久| 欧美激情精品久久久六区热门| 欧美一区二区在线看| 国产精品免费小视频| 中文亚洲视频在线| 亚洲片在线观看| 欧美成人综合| 亚洲精品日韩在线| 亚洲高清视频在线| 欧美va亚洲va香蕉在线| 亚洲国产精品久久久久婷婷老年 | 久久视频精品在线| 国产一区二区三区电影在线观看| 亚洲综合视频1区| 日韩视频―中文字幕| 欧美日韩国产高清视频| 日韩视频在线免费| 亚洲国产欧美久久| 欧美日本不卡| 一区二区不卡在线视频 午夜欧美不卡在| 欧美成人精品一区二区三区| 久久视频在线看| 亚洲人精品午夜在线观看| 欧美va天堂va视频va在线| 欧美电影电视剧在线观看| 久久裸体艺术| 在线电影一区| 亚洲第一精品夜夜躁人人爽 | 亚洲欧美在线免费观看| 国产欧美精品在线观看| 久久国产成人| 欧美在线一二三四区| 又紧又大又爽精品一区二区| 欧美国产先锋| 欧美日韩在线视频一区| 亚洲欧美日韩一区在线| 欧美一级大片在线观看| 亚洲第一综合天堂另类专| 欧美成人免费全部观看天天性色| 久久人人爽人人爽爽久久| 中日韩美女免费视频网址在线观看 | 欧美日韩国产一区二区三区| 亚洲综合999| 亚洲小视频在线观看| 国产亚洲欧美日韩一区二区| 欧美a级片一区| 欧美午夜精彩| 久久五月天婷婷| 欧美日韩精品一区视频| 久久精品国产精品亚洲综合| 久久久www成人免费毛片麻豆| 91久久精品国产91久久性色| 中文av一区特黄| 亚洲福利视频免费观看| 中日韩高清电影网| 亚洲高清在线| 亚洲一区二区精品| 亚洲国产日韩欧美在线图片| 日韩亚洲视频| 亚洲精品女av网站| 日韩视频第一页| 影音先锋日韩精品| 中文精品99久久国产香蕉| 在线观看欧美黄色| 亚洲一区二区三区高清不卡| 91久久线看在观草草青青| 午夜久久久久久久久久一区二区| 日韩午夜电影av| 久久另类ts人妖一区二区| 欧美一区在线视频| 欧美日韩国产美女| 亚洲大片av| 在线看日韩欧美| 欧美在线观看天堂一区二区三区 | 亚洲第一在线视频| 亚洲你懂的在线视频| 99国产精品久久久久久久成人热 | 午夜日韩福利| 欧美视频一区二区| 亚洲在线一区| 欧美成人中文字幕| 欧美99久久| 亚洲国产99精品国自产| 久久精品国产亚洲a| 亚洲欧美在线免费| 欧美网站在线| avtt综合网| 中文在线一区| 欧美四级电影网站| 一区二区日本视频| 亚洲在线观看| 国产精品视频观看| 亚洲欧美日韩精品一区二区| 午夜免费电影一区在线观看| 欧美调教vk| 亚洲一区二区欧美| 欧美在线视频在线播放完整版免费观看 | 99在线精品免费视频九九视| 免费视频一区| 亚洲国产日韩美| 日韩午夜一区| 欧美日韩亚洲一区三区| 一本色道久久综合狠狠躁的推荐| 亚洲午夜精品一区二区| 国产精品人人做人人爽| 欧美亚洲日本网站| 麻豆精品精品国产自在97香蕉| 揄拍成人国产精品视频| 欧美国产精品劲爆| 99在线热播精品免费| 性欧美1819性猛交| 精品动漫3d一区二区三区免费版| 美女精品在线| 一区二区日韩欧美| 美女黄毛**国产精品啪啪| 亚洲欧洲精品一区二区| 欧美日韩免费观看一区=区三区| 一个色综合导航| 久久男女视频| 夜夜夜久久久| 国产一区二区主播在线| 欧美电影在线免费观看网站| 中国av一区| 亚洲国产成人久久| 亚洲欧美一区二区视频| 亚洲国产精品电影在线观看| 国产精品福利av| 两个人的视频www国产精品| 日韩亚洲在线观看| 玖玖玖国产精品| 亚洲图片欧美一区| 亚洲福利视频三区| 国产伦精品一区二区三区免费迷| 麻豆成人综合网| 亚洲综合丁香| 亚洲精品久久视频| 裸体女人亚洲精品一区| 亚洲一区二区三区四区五区黄| 精品69视频一区二区三区| 欧美日韩亚洲国产精品| 久久久噜噜噜久噜久久| 亚洲一区三区视频在线观看 | 美腿丝袜亚洲色图| 亚洲一级片在线看| 国产日韩精品一区二区浪潮av| 亚洲精选一区二区| 亚洲麻豆av| 狠狠色伊人亚洲综合成人| 欧美色一级片| 免费影视亚洲| 久久精彩视频| 午夜欧美大片免费观看| 99在线观看免费视频精品观看| 亚洲国产欧美久久| 欧美大片免费观看在线观看网站推荐 | 国产亚洲福利| 国产精品一区二区欧美| 国产精品久久久久久久午夜片|