分类: WINDOWS
2012-11-08 11:04:59
刚做完一个VC+mysql的项目。mysql以前只是听说过,没有用过,这次用过后感觉还不错,特别是它强大的C API函数库。不过也有很大的缺点,比如说操作数据库和数据表不方便,要在类似于控制台的操作界面进行操作数据库。也就是基于这个原因,便想在项目里把数据库的创建,数据表的创建和对数据库的连接都放在程序里实现。方便用户的使用。
先介绍一下开发环境吧:系统是:winxp 开发平台是:VC 6.0 + MySQL。
一、添加MYSQL的头文件和LIB库,并定义MYSQL的全局变量mysql
函数ConnectDB是进行数据库创建,连接的主要函数。本篇文章所讲的代码都将在这个函数里实现。在函数ConnectDB所在的文件的开始添加MYSQL头文件,添加MYSQL的LIB库,并在全局变量定义的地方定义全局变量mysql。
#include
#pragma comment(lib,"libmysql.lib") //添加lib库,如果lib库文件在一个特定的目录,可把lib库文件的绝对路径名也包含进入,如:#pragma comment(lib,"F:\Mysql\\lib\\debug\\libmysql.lib") ,也可以是相对路径,如:#pragma comment(lib,"Debug\\lib\\mysqlclient.lib") 。
MYSQL mysql; //定义全局变量
二、实现MYSQL数据库、数据表的创建和数据库的连接
MYSQL数据库、数据表的创建和数据库的连接都在函数ConnectDB内完成。详细代码如下:
MYSQL mysql; //定义全局变量
int connectdb(char *cfgfilename)
{
//Connect the database
char *host = "localhost", //选择mysql默认存放数据的data目录做为存放数据的目录
*user = "root",
*passwd = NULL,
*database = "smsdb",
*defaultdatabase = "mysql";
mysql_init(&mysql); //初始化mysql
//连接要创建的数据库
if (!mysql_real_connect(&mysql,host,user,passwd,database,0,NULL,0)) {
//连接MYSQL默认的数据库mysql。该数据库就在MYSQL安装路径下的Data目录里。
if (!mysql_real_connect(&mysql,host,user,passwd,defaultdatabase,0,NULL,0)) {
MessageBox(NULL,"Connect Default Database Failed","Error",MB_OK);
return -1;
}
//创建要创建的数据库
if (mysql_query(&mysql,"Create database smsdb character set utf8") != NULL) {
MessageBox(NULL,"Create DabaBase Failed!","Error",MB_OK);
return -1;
}
//连接创建后的数据库
if(!mysql_real_connect(&mysql,host,user,passwd,database,0,NULL,0)) {
MessageBox(NULL,"Connect Default Failed","Error",MB_OK);
return -1;
}
//选择创建后的数据库
if (mysql_select_db(&mysql,database) != NULL) {
MessageBox(NULL,"Select DataBase Failed!","Error",MB_OK);
return -1;
}
//在创建的数据库里创建数据表
char *cSQL = "CREATE TABLE IF NOT EXISTS rcv_bak (id int(11) not null auto_increment,\
phone_no varchar(13) not null,\
contents longtext,\
publish_date datetime default null,\
cmd_type int(11) default NULL,\
primary key (id))";
if (mysql_query(&mysql,cSQL) != NULL) {
MessageBox(NULL,"create rcv_bak table failed!","Error",MB_OK);
return -1;
}
cSQL = "CREATE TABLE IF NOT EXISTS smsrcv (id int(11) not null auto_increment,\
phone_no varchar(13) not null,\
contents longtext,\
publish_date datetime default null,\
cmd_type int(11) default NULL,\
primary key (id))";
if (mysql_query(&mysql,cSQL) != NULL) {
MessageBox(NULL,"create smsrcv table failed!","Error",MB_OK);
return -1;
}
}
return 0;
}
至此,VC 通过调用C API创建数据库、数据表并连接数据库的实现完成,需要说明的一点是,如果你手动地删除你创建的数据库和数据表,再次创建数据表时,会出现创建失败的消息。这个问题我没有解决,哪位牛人如果能解决了,请邮件联系,谢谢!