国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

使用C連接Mysql_MySQL

來源:懂視網 責編:小采 時間:2020-11-09 17:44:57
文檔

使用C連接Mysql_MySQL

使用C連接Mysql_MySQL:一、高性能數據庫的選擇---- 在數據庫的應用開發(fā)中,常常會遇到性能和代價的之間矛盾。以作者在開發(fā)股市行情查詢和交易系統中遇到的問題為例,要在實時記錄1000多只股票每分鐘更新一次的行 情數據的同時,響應大量并發(fā)用戶的數據查詢請求。考慮到性價比和易維
推薦度:
導讀使用C連接Mysql_MySQL:一、高性能數據庫的選擇---- 在數據庫的應用開發(fā)中,常常會遇到性能和代價的之間矛盾。以作者在開發(fā)股市行情查詢和交易系統中遇到的問題為例,要在實時記錄1000多只股票每分鐘更新一次的行 情數據的同時,響應大量并發(fā)用戶的數據查詢請求。考慮到性價比和易維

一、高性能數據庫的選擇

---- 在數據庫的應用開發(fā)中,常常會遇到性能和代價的之間矛盾。以作者在開發(fā)股市行

情查詢和交易系統中遇到的問題為例,要在實時記錄1000多只股票每分鐘更新一次的行

情數據的同時,響應大量并發(fā)用戶的數據查詢請求。考慮到性價比和易維護性,系統又

要求在基于PC服務器,Windows NT平臺的軟硬件環(huán)境下實現。開始,我們采用了MS SQL

Server 6.5 作為數據庫系統,用Visual C++ 6.0開發(fā)了訪問數據庫的前端,應用ODBC

數據接口,在進行了大量的數據庫配置和程序優(yōu)化后,發(fā)現仍不能滿足性能要求。后采

用SQL Server的DB-Library接口,繞過了ODBC解釋層,可以每秒更新行情數據30次,同

時支持20-30個左右的并發(fā)用戶進行行情查詢,基本滿足要求(單臺PC服務器,單PII3

50 CPU,內存128M,SCSI硬盤)。有沒有可能進一步提高系統的性能和負載能力呢?經

過分析,數據庫服務器是系統的瓶頸。當然,可以采用UNIX服務器+大型數據庫的系統

平臺,但其開發(fā)、運行、維護的費用比微機+Windows NT平臺的費用高出數倍。我們在

其它一些系統的開發(fā)中,也經常遇到這樣的矛盾。如何在微機平臺上建立大容量、高效

率、易維護、高性價比的數據庫系統呢?

---- 考察國內基于微機平臺的數據庫應用系統,典型的如網易的分布式郵件系統,采用

了FreeBSD+MySQL的平臺,其容量、負載能力和響應速度都很優(yōu)秀。作者查閱了MySQL的

相關文檔,發(fā)現MySQL是GNU軟件(即OpenSource自由軟件)中非常優(yōu)秀的數據庫系統,

它完全符合SQL92 (Entry level)和 ODBC( level 0-2)規(guī)范,在符合POSIX規(guī)范的操

作系統上實現了非常高效的關系型數據庫管理系統。根據MySQL提供的文檔,它的數據操

作堪稱所有數據庫中最高效的,Benchmark如下表:

Reading 2000000 rows by index

Database Seconds

mysql 367

mysql_odbc 464

db2_odbc 1206

informix_odbc 121126

ms-sql_odbc 1634

oracle_odbc 20800

solid_odbc 877

sybase_odbc 17614

Inserting (350768) rows

Database Seconds

mysql 381

mysql_odbc 619

db2_odbc 3460

informix_odbc 2692

ms-sql_odbc 4012

oracle_odbc 11291

solid_odbc 1801

sybase_odbc 4802

(run on the same NT 4.0 machine)

---- 從MySQL的Benchmark中可以看到,MySQL的性能非常出眾(當然,測試的MySQL系統

可能作了優(yōu)化,被測數據可能是針對MySQL選擇的),而且MySQL提供了對Windows NT的

支持。Windows NT+MySQL能否成為構建高性能數據庫應用的理想選擇呢?作者用MySQL

的數據接口改寫了程序,經過一段時間的運行,證明MySQL確實是高效而穩(wěn)定的數據庫,

非常適合構建大容量、高效率、易維護、高性價比的數據庫應用系統。現將MySQL的安裝

、運行、開發(fā)的心得與大家共享。

二、MySQL的安裝和運行

---- 首先從http://www.mysql.com/(國內用戶可以從http://www.freecode.com.cn/m

irror/mysql/)下載MySQL的執(zhí)行代碼及源代碼。注意,Windows NT用戶要選擇NT下的執(zhí)

行代碼,我下載的是mysql-shareware-3.22.32-win.zip。解包后執(zhí)行Setup,按屏幕提

示即可完成安裝。

---- 拷貝MySQL根目錄(c:/mysql)下的my-example.cnf到c:/my.cnf,按文件中的提示

編輯my.cnf(如果MySQL的根目錄是c:/mysql,可暫不改動my.cnf)。在NT的控制臺窗口

中,進入MySQL的執(zhí)行目錄(c:/mysql/bin),執(zhí)行

---- C:/mysql/bin/mysqld-shareware --standalone

---- 則MySQL的數據庫引擎啟動。打開另一NT控制臺窗口,執(zhí)行

---- C:/mysql/bin/mysql mysql

---- 建立數據庫連接,出現“mysql>”提示符后,執(zhí)行

---- mysql > DELETE FROM user WHERE Host='localhost' AND User='';

---- mysql > QUIT

---- 刪除所有的非授權用戶。

---- 然后執(zhí)行

---- C:/mysql/bin/mysqladmin reload

---- C:/mysql/bin/mysqladmin -u root password your_password

---- 其中,your_password是你選擇的數據庫管理員的口令,必須妥善保管。

---- 如果要每次都以管理員身份連接數據庫,則編輯c:/my.cnf,在[client]段中加入

user=root

password= your_password

如果要停止MySQL的數據庫引擎,可以執(zhí)行

C:/mysql/bin/mysqladmin -u=root -p shutdown

按提示輸入管理員口令后,MySQL的數據庫引擎停止。

三、MySQL客戶端應用的開發(fā)

---- MySQL提供了豐富的數據接口API,包括C、C++、Perl、PHP、Python、TCL等API和

JDBC,ODBC接口。出于性能考慮,我們采用了MySQL的C API進行開發(fā)。現以Visual C++

環(huán)境為例,作一簡單介紹。

---- 新建一Win32 Console Application的Project,把“c:/mysql/include”添加到編

譯選項的包含路徑中(在Project Options中加入 /I "d:/mysql/include&quounter.cgol.net 魈迦縵攏?

#include

#include

#include

#include

int main( int argc, char * argv[] )

{

char szTargetDSN[] = "test";

char szSqlText[500]="";

char aszFlds[ 25 ][ 25 ];

MYSQL * myData ;

MYSQL_RES * res ;

MYSQL_FIELD * fd ;

MYSQL_ROW row ;

int i,j,k;

BOOL bCreate = TRUE;

if ( (myData = mysql_init((MYSQL*) 0))

//初始化數據結構

&& mysql_real_connect( myData, NULL,

//連接數據庫

"root", " your_password ", szTargetDSN,

MYSQL_PORT, NULL, 0 ) )

{

if(bCreate)

{

sprintf(szSqlText, //構造SQL語句

"create table mytable "

//新建一張表

"(time datetime, s1 char(6), "

"s2 char(11), s3 int, s4 int)");

if (mysql_query( myData, szSqlText))

//執(zhí)行SQL語句

{//執(zhí)行SQL語句出錯

ErrLog( "Can't create table") ;

mysql_close( myData ) ;

return FALSE ;

}

sprintf(szSqlText,

"insert into mytable "

//向表中插入數據

"values('2000-3-10 21:01:30',"

//注意時間的格式

"'Test','MySQLTest',2000,3)");

if (mysql_query( myData, szSqlText))

{//執(zhí)行SQL語句出錯

ErrLog( "Can't insert data to table") ;

mysql_close( myData ) ;

return FALSE ;

}

sprintf(szSqlText, "select * from mytable ");

if (mysql_query( myData, szSqlText))

//進行數據檢索

{

//執(zhí)行SQL語句出錯

mysql_close( myData ) ;

return FALSE ;

}

else

{

res = mysql_store_result( myData ) ;

//取得查詢結果

i = (int) mysql_num_rows( res ) ;

//取得有效記錄數

printf( "Query: %s/n%ld records found:

/n", szSqlText, i ) ;

for ( i = 0 ; fd = mysql_fetch_field( res ) ;

i++ )

strcpy( aszFlds[ i ], fd->name ) ;

//取得各字段名

for (i=1; row = mysql_fetch_row( res ); )

//依次讀取各條記錄

{j = mysql_num_fields( res ) ;

//取得記錄中的字段數

printf( "Record #%ld:-/n", i++ ) ;

for ( k = 0 ; k < j ; k++ )

//輸出各字段的值

printf( " Fld #%d (%s): %s/n", k + 1, aszFlds[ k ],

(((row[k]==NULL)||

(!strlen(row[k])))?"NULL":row[k])) ;

puts( "==============================/n" ) ;

}

mysql_free_result( res ) ;

}

}

else

{//連接數據庫出錯

ErrLog( "Can't connect to the mysql server ") ;

mysql_close( myData ) ;

return FALSE ;

}

mysql_close( myData ) ;

return TRUE ;

}

---- 對其中幾個函數作簡單說明,詳細說明,可參考MySQL文檔:

---- 1. MYSQL *mysql_init(MYSQL *mysql)

---- 初始化一個類型為MYSQL的數據結構,為執(zhí)行mysql_real_connect()做準備。參數

mysql為指向該結構的指針,如果mysql為NULL,則新建并初始化一個MYSQL的數據結構。

新建的結構將在mysql_close()中釋放。

---- 若成功,返回初始化的MYSQL數據結構的指針,否則返回NULL。

---- 2. MYSQL *mysql_real_connect(MYSQL *mysql, const char *host,

---- const char *user, const char *passwd, const char *db,

---- unsigned int port, const char *unix_socket, unsigned int client_flag)

---- 與MySQL數據庫引擎建立連接。在執(zhí)行進一步的數據操作之前,必須保證mysql_re

al_connect()成功返回。

---- 參數mysql是mysql_init()的返回值;

---- 參數host是運行MySQL數據庫引擎的機器的TCP/IP主機名,如為NULL則默認為“l(fā)o

calhost”;

---- 參數user和passwd是MySQL數據庫的合法用戶和口令;

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

使用C連接Mysql_MySQL

使用C連接Mysql_MySQL:一、高性能數據庫的選擇---- 在數據庫的應用開發(fā)中,常常會遇到性能和代價的之間矛盾。以作者在開發(fā)股市行情查詢和交易系統中遇到的問題為例,要在實時記錄1000多只股票每分鐘更新一次的行 情數據的同時,響應大量并發(fā)用戶的數據查詢請求。考慮到性價比和易維
推薦度:
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 特级全黄一级毛片视频 | 日本亚洲国产精品久久 | 国产欧美久久久精品影院 | 精品久久久久久综合网 | 欧美在线日韩在线 | 在线视频 日韩 | 成人无码一区二区片 | 欧美日本国产 | 国产高清免费 | 久久er99热精品一区二区 | 国产成人精品一区二区三区… | 亚洲 欧美 日韩 综合 | 欧美激情一区二区三区四区 | 日韩中文字幕a | 亚洲综合欧美 | 大色欧美| 国产精品成人va | 永久免费观看的毛片的网站 | 精品在线播放 | 国产成人综合久久精品下载 | 自拍偷拍欧美亚洲 | 亚洲欧美在线观看视频 | 97国产视频| 欧美日韩国产一区 | 免费a级在线观看完整片 | 一区二区三区四区电影 | 久久精品成人 | 久久久精| 极品美女国产精品免费一区 | 久久国产精品久久久久久久久久 | 国产成人久久精品亚洲小说 | 久久精品一区二区国产 | 欧美成人高清在线视频大全 | 欧美日韩精品一区二区三区四区 | 日韩在线无 | 亚洲精品在线免费看 | 亚洲精品乱码久久久久久v 亚洲精品免费观看 | 青青国产成人久久91网站站 | 91久久国产综合精品女同国语 | 欧美日韩小视频 | 四虎影视永久在线 |