使用C连接Mysql

小蚊子even

小蚊子even

2016-02-19 19:22

岁数大了,QQ也不闪了,微信也不响了,电话也不来了,但是图老师依旧坚持为大家推荐最精彩的内容,下面为大家精心准备的使用C连接Mysql,希望大家看完后能赶快学习起来。

一、高性能数据库的选择

---- 在数据库的应用开发中,常常会遇到性能和代价的之间矛盾。以作者在开发股市行情查询和交易系统中遇到的问题为例,要在实时记录1000多只股票每分钟更新一次的行情数据的同时,响应大量并发用户的数据查询请求。考虑到性价比和易维护性,系统又要求在基于PC服务器,Windows NT平台的软硬件环境下实现。开始,我们采用了MS SQLServer 6.5 作为数据库系统,用Visual C++ 6.0开发了访问数据库的前端,应用ODBC数据接口,在进行了大量的数据库配置和程序优化后,发现仍不能满足性能要求。后采用SQL Server的DB-Library接口,绕过了ODBC解释层,可以每秒更新行情数据30次,同时支持20-30个左右的并发用户进行行情查询,基本满足要求(单台PC服务器,单PII350 CPU,内存128M,SCSI硬盘)。有没有可能进一步提高系统的性能和负载能力呢?经过分析,数据库服务器是系统的瓶颈。当然,可以采用UNIX服务器+大型数据库的系统平台,但其开发、运行、维护的费用比微机+Windows NT平台的费用高出数倍。我们在其它一些系统的开发中,也经常遇到这样的矛盾。如何在微机平台上建立大容量、高效率、易维护、高性价比的数据库系统呢?

---- 考察国内基于微机平台的数据库应用系统,典型的如网易的分布式邮件系统,采用了FreeBSD+MySQL的平台,其容量、负载能力和响应速度都很优秀。作者查阅了MySQL的相关文档,发现MySQL是GNU软件(即OpenSource自由软件)中非常优秀的数据库系统,它完全符合SQL92 (Entry level)和 ODBC( level 0-2)规范,在符合POSIX规范的操作系统上实现了非常高效的关系型数据库管理系统。根据MySQL提供的文档,它的数据操作堪称所有数据库中最高效的,Benchmark如下表:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

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系统可能作了优化,被测数据可能是针对MySQL选择的),而且MySQL提供了对Windows NT的支持。Windows NT+MySQL能否成为构建高性能数据库应用的理想选择呢?作者用MySQL的数据接口改写了程序,经过一段时间的运行,证明MySQL确实是高效而稳定的数据库,非常适合构建大容量、高效率、易维护、高性价比的数据库应用系统。现将MySQL的安装、运行、开发的心得与大家共享。

二、MySQL的安装和运行

---- 首先从http://www.mysql.com/(国内用户可以从http://www.freecode.com.cn/mirror/mysql/)下载MySQL的执行代码及源代码。注意,Windows NT用户要选择NT下的执行代码,我下载的是mysql-shareware-3.22.32-win.zip。解包后执行Setup,按屏幕提示即可完成安装。

---- 拷贝MySQL根目录(c:mysql)下的my-example.cnf到c:my.cnf,按文件中的提示编辑my.cnf(如果MySQL的根目录是c:mysql,可暂不改动my.cnf)。在NT的控制台窗口中,进入MySQL的执行目录(c:mysqlin),执行

---- C:mysqlinmysqld-shareware --standalone

---- 则MySQL的数据库引擎启动。打开另一NT控制台窗口,执行

---- C:mysqlinmysql mysql

---- 建立数据库连接,出现“mysql”提示符后,执行

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

---- mysql QUIT

---- 删除所有的非授权用户。

---- 然后执行

---- C:mysqlinmysqladmin reload

---- C:mysqlinmysqladmin -u root password your_password

---- 其中,your_password是你选择的数据库管理员的口令,必须妥善保管。

---- 如果要每次都以管理员身份连接数据库,则编辑c:my.cnf,在[client]段中加入:

user=root

password= your_password

如果要停止MySQL的数据库引擎,可以执行C:mysqlinmysqladmin -u=root -p shutdown按提示输入管理员口令后,MySQL的数据库引擎停止。

三、MySQL客户端应用的开发

---- MySQL提供了丰富的数据接口API,包括C、C++、Perl、PHP、Python、TCL等API和JDBC,ODBC接口。出于性能考虑,我们采用了MySQL的C API进行开发。现以Visual C++环境为例,作一简单介绍。

---- 新建一Win32 Console Application的Project,把“c:mysqlinclude”添加到编译选项的包含路径中(在Project Options中加入 /I "d:mysqlinclude&quounter.cgol.net 魈迦缦拢?

#include windows.h

#include stdio.h

#include string.h

#include mysql.h

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))

//执行SQL语句

{//执行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))

{//执行SQL语句出错

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

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

mysql_close( myData ) ;

return FALSE ;

}

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

if (mysql_query( myData, szSqlText))

//进行数据检索

{

//执行SQL语句出错

mysql_close( myData ) ;

return FALSE ;

}

else

{

res = mysql_store_result( myData ) ;

//取得查询结果

i = (int) mysql_num_rows( res ) ;

//取得有效记录数

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

", 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:-", i++ ) ;

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

 

展开更多 50%)
分享

猜你喜欢

使用C连接Mysql

编程语言 网络编程
使用C连接Mysql

c#与mysql的连接

编程语言 网络编程
c#与mysql的连接

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

通过C API远程连接Mysql Server

编程语言 网络编程
通过C API远程连接Mysql Server

JSP 连接MySQL配置与使用

Web开发
JSP 连接MySQL配置与使用

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Mysql中左连接的使用

MySQL mysql数据库
Mysql中左连接的使用

使用Perl连接Mysql数据库

编程语言 网络编程
使用Perl连接Mysql数据库

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

三种方法修改MySQL中一个用户的密码

三种方法修改MySQL中一个用户的密码

如何将桌面文件移放到D盘

如何将桌面文件移放到D盘
下拉加载更多内容 ↓