Chinaunix首页 | 论坛 | 博客
  • 博客访问: 280154
  • 博文数量: 76
  • 博客积分: 1500
  • 博客等级: 上尉
  • 技术积分: 594
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-05 23:43
文章分类

全部博文(76)

文章存档

2014年(4)

2013年(3)

2012年(20)

2011年(49)

分类: WINDOWS

2012-11-08 11:04:59

转自: http://blog.163.com/yuxiangdingdang@126/blog/static/10879785200962462635690/

刚做完一个VC+mysql的项目。mysql以前只是听说过,没有用过,这次用过后感觉还不错,特别是它强大的C API函数库。不过也有很大的缺点,比如说操作数据库和数据表不方便,要在类似于控制台的操作界面进行操作数据库。也就是基于这个原因,便想在项目里把数据库的创建,数据表的创建和对数据库的连接都放在程序里实现。方便用户的使用。

 先介绍一下开发环境吧:系统是:winxp 开发平台是:VC 6.0 + MySQL。

一、添加MYSQL的头文件和LIB库,并定义MYSQL的全局变量mysql

函数ConnectDB是进行数据库创建,连接的主要函数。本篇文章所讲的代码都将在这个函数里实现。在函数ConnectDB所在的文件的开始添加MYSQL头文件,添加MYSQL的LIB库,并在全局变量定义的地方定义全局变量mysql。

#include     //添加MYSQL的头文件

#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创建数据库、数据表并连接数据库的实现完成,需要说明的一点是,如果你手动地删除你创建的数据库和数据表,再次创建数据表时,会出现创建失败的消息。这个问题我没有解决,哪位牛人如果能解决了,请邮件联系,谢谢!


sub
断开数据库重连接就能创建表了
回复

阅读(1713) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~