Vs2010连接Mysql数据库方法

转载原地址:http://blog.csdn.net/w174504744/article/details/7884997


操作系统:winxp-32bit 
数据库MySQL Server 5.5 
(安装路径:D:\ProgramFiles\MySQL\MySQL Server 5.5) 
IDE: Microsoft Visual Studio 2010 untimate/Professional 
(以上东西都是完整安装的) 
-------------------------------------------

下载MySQL 5.5.13 正式版:http://www.xiazaiba.com/html/361.html

一、VC设置

1、新建一个工程,随便写一个helloworld,目的是就是让工程下的“debug”文件夹出现 
2、把D:\Program Files\MySQL\MySQL Server 5.5\lib下面的libmysql.dll复制到工程的debug文件夹里面 
3、接下来要设置一些引用文件的环境变量,首先,点击项目->属性->vc++目录。 
然后“include目录”那把“D:\ProgramFiles\MySQL\MySQL Server 5.5\include”给加进来 
再然后“lib目录”那里把“D:\ProgramFiles\MySQL\MySQL Server 5.5\lib”也一起加进来

VC6.0设置:

(1)打开VC6.0 工具栏Tools菜单下的Options选项,在Directories的标签页中右边的“Show directories for:”下拉列表中选中“Includefiles”,然后在中间列表框中添加你本地安装MySQL的include目录路径。(我的是D:\Program Files\MySQL\MySQL Server 5.5\include)。

(2)在上面说到的“Showdirectories for:”下拉列表中选中“Library files”,然后添加你本地安装MySQL的Lib目录路径。Lib目录下有debug目录,选debug。(我的是D:\ProgramFiles\MySQL\MySQL Server 5.5\lib\debug)。

4、然后在项目->属性窗口下点击:连接器->输入->附加依赖项,把"libmysql.lib"写进去

VC6.0设置:在“Projectsettings->Link:Object/library modules”里面添加“libmysql.lib”。

使用VC++编译时再添加以下项:

5、在stdafx.h里面添加如下的内容: 
#include "mysql.h"

#include "winsock.h" // 如果编译出错,则把该行放到#include "mysql.h"之前#pragmacomment(lib,"libmySQL.lib") // 如果在附加依赖项里已增加,则就不要添加了

二、数据库的相关操作

1、打开“开始->所有程序->MySQL->MySQLServer 5.5->MySQL Command Line Client.exe”,如果有密码就输入密码,没有设置密码就直接按回车,会提示服务器启动成功。


2、显示所有的数据库

mysql> show databases;注意一定要 敲“;”后再按回车

3、创建数据库mydb

mysql> create database mydb;


4、选择你所创建的数据库mydb

mysql> use mydb;


5、显示数据库中的表

mysql> show tables;


因为是新创建的数据库,所以为空

6、创建一个表

mysql> create table tettable (id int(3)auto_increment not null primary key,timedatetime,name char(10) notnull,addressvarchar(20),year date,s1 char(11) ,s2 int default ‘1’ )


注:在建表中: 
(1)将ID设为长度为3的数字字段:int(3)并让它每个记录自动加一:auto_increment并不能为空:not null,而且让他成为主字段primary key。

       (2)将time设为日期时间字段。 
(3)将NAME设为长度为10的字符字段。并不能为空:not null 
(4)将ADDRESS设为长度20的字符字段,而且缺省值为深圳。varchar和char有什么区别呢,只有等以后的文章再说了。 
(4)将YEAR设为日期字段。

       (5)将S1设为长度为11的字符字段

       (6)将S2设为数字字段int,而且缺省值为1

7、显示表的结构 
mysql> describe testtable;


8、实现添加数据到表

mysql> insert into testtablevalues('1','2010-10-08', 'bj','深圳一中','2010-10-08','MySQLTest',20);

mysql> insert into testtablevalues('2','2010-10-08', 'jj','深圳二中','2010-10-08','MySQLTest2',20);


9、显示表中的记录

mysql> select * from testtable;

mysql>  select * from testtable wherename  = “bj”;


10、实现修改功能

mysql>  update testtable set address = "桃园县一中" where name  = "jj";

mysql> select * from testtable;


11、实现删除功能

mysql> delete from testtable where name  ="jj";

mysql> delete from testtable where id>4;

mysql> delete from testtable where id>4 andid<9;


12、删库和删表: 
drop database 库名; 
drop table 表名;

13、将表中记录清空: 
delete from 表名;


14、将文本数据转到数据库中

1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用\n来代替. 
例: 
3 1976-10-10 rose 深圳二中 1976-10-10 mysql1 22 
4 1976-10-10 mike 深圳一中 1975-12-23 mysql2 24

2、数据传入命令 load data local infile "文件名" into table 表名; 
注意:你最好将文件复制到\mysql\bin目录下,并且要先用use命令打表所在的库。

15、备份数据库:(命令在DOS的\mysql\bin目录下执行)

mysqldump --opt 数据库或表名 -u root -p密码 > F:\mydb.bbb

mysqldump --opt mydb -u root -p111 > F:\mydb.sql 
注释:将数据库mydb备份到F盘mydb.bbb文件,mydb.sql是一个文本文件,文件名任取,打开看看你会有新发现。-u后空格,指定用户名,必需,-p指定密码,注意后面直接跟密码不能空格,如果不填密码,再在后面输入即可。

16、导入数据库

从e:\MySQL\mydb2.sql中将文件中的SQL语句导入数据库中:
1.从命令行进入MySQL,然后用命令CREATEDATABASE mydb2;创建数据库mydb2。
2.退出MySQL 可以输入命令exit;或者quit;
3.在CMD中输入下列命令:
c:\>MySQL -h localhost -u root -p mydb2 < e:\MySQL\mydb2.sql

17、MySql密码修改

格式:mysqladmin -u用户名 -p旧密码 password 新密码
1、给root加个密码ab12。首先在DOS下进入目录mysql\bin,然后键入以下命令
    mysqladmin -u root -password ab12
    注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。
2、再将root的密码改为djg345。
    mysqladmin -u root -pab12 password djg345
(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)
3、命令行修改root密码:
    >use mysql 
    >update user set password=password(”djg345”) where user=”root”; 
    >flush privileges; 
   重新杀 MySQL ,用正常方法启动MySQL 。
4、显示当前的user:
  mysql> SELECT USER();

MYSQL增加用户

命令方式的.注意每行后边都跟个; 表示一个命令语句结束.

格式:grant select on 数据库.* to 用户名@登录主机identified by "密码"


例1、增加一个用户user密码为1234,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MYSQL,然后键入以下命令:
grantselect,insert,update,delete on *.* to user@"%" identified by"1234";

但例1增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见例2。


例2、增加一个用户user密码为1234,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作 (localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道user的密码,他也无法从internet上直接访问数据 库,只能通过MYSQL主机上的web页来访问了。

grantselect,insert,update,delete on *.* to user@localhost identifiedby "1234";
grant select,insert,update,delete on mydb.* to user@localhost identifiedby "1234";


如果你不想test2有密码,可以再打一个命令将密码消掉。
grantselect,insert,update,delete on *.* to user@localhost identified by "";
grant select,insert,update,delete on mydb.* to user@localhost identifiedby "";

 

18、关于排序与选择

1)em_site_access 表信息如下:


2)按字段USER_ID递增排序
select * from em_site_access order by USER_ID;  递增排序


3)按字段USER_ID递减排序,在后面添加desc就行了
select * from em_site_access order by USER_ID desc; 递减排序


4)按字段USER_ID,SITE_CODE递减排序
select * from em_site_access order by USER_ID desc,SITE_CODEdesc; 


5)选择字段值为SITE_CODE=00060项并按字段USER_ID递增排序
select * from em_site_access where SITE_CODE=00060 order by USER_ID;


6)选择字段值同时满足SITE_CODE=00060和USER_ID=922项
select * from em_site_access where SITE_CODE=00060 and USER_ID=922;


1  Linux平台及windows平台mysql重启方法

  Linux下重启MySQL的正确方法:
  1.启动:/etc/init.d/mysqld start
  2.停止:/etc/init.d/mysqld stop
  3.重启:/etc/init.d/mysqldrestart
    启动:# service mysqld start
    停止:# service mysqld stop 
    重启:# service mysqld restart
  Windows
  1.点击“开始”->“运行”(快捷键Win+R)。
  2.启动:输入 net stop mysql
  3.停止:输入 net start mysql
  * Windows下不能直接重启(restart),只能先停止,再启动。

后记:其实MYSQL的对数据库的操作与其它的SQL类数据库大同小异,最好找本将SQL的书看看。在这里只介绍一些基本的。最好的MYSQL教程还是"晏子"译的"MYSQL中文参考手册"不仅免费,每个相关网站都有下载,而且它是最权威的。(down load here) ">">附件

三、C++编程

#include<Windows.h> 
#include<string> 
#include<iostream> 
#include<mysql.h> 
#include<stdio.h>

int main()

{

    //connectionparams 
    char *host = "localhost"; 
    char *user = "root"; 
    char *pass = "111";//你的mysql服务器密码 
    char *db = "MySql"; 
    unsignedint port = 3306; //server port 

    MYSQL *sock; 
    MYSQL_RES *res; 
    MYSQL_FIELD * fd; 
    MYSQL_ROW row; 
    char szSqlText[500]="";

    inti; 
    inttcreate=0;

    sock=mysql_init(0); 
    if(sock &&mysql_real_connect(sock,host,user,pass,db,0,NULL,0)) 
    { 
        std::cout<<"connect mysqlsucceed!"<<std::endl; 
       //mysql_set_character_set(sock,"utf8"); 
        mysql_query(sock, "set namesgb2312"); 
        //mysql_query(sock, "SET NAMESGBK"); //设置编码格式,否则在cmd下无法显示中文 
       //connectioncharacter set 
       //waitfor possibility to checksystem/mysqlmysqlets 
       if(tcreate) 
       { 
           sprintf(szSqlText,"create table datatable (id int(3) auto_increment not null primarykey,timedatetime,name char(10) not null,addressvarchar(20),year date,s1char(11) ,s2 int default '1') CHARACTER SET utf8");//构造SQL语句 新建一张表 
          std::cout<<"Create table tttable!"<<std::endl; 
           tcreate = 1; 
          if(mysql_query(sock,szSqlText))//执行Dsql语句,并判断是否出错 
           { 
             std::cout<<"can't createtable:"<<mysql_error(sock)<<std::endl; 
             //tcreate = 0; 
             mysql_close(sock); 
             return FALSE; 
           } 
       } 
       sprintf(szSqlText,//向mytable这个表插入数据 注意时间格式 
           "insert intodatatable values('1','2010-10-08', 'bj','深圳一中','2010-10-08','MySQLTest',20)"); 
       std::cout<<"Insert data totable!"<<std::endl; 
       if(mysql_query( sock, szSqlText)) 
       { 
          std::cout<<"Can'tinsert data to table"<<mysql_error(sock)<<std::endl; 
           mysql_close( sock); 
           return FALSE ; 
       }

      sprintf(szSqlText, "select* from datatable"); 
       std::cout<<"select* fromdatatable!"<<std::endl; 
       if(mysql_query( sock, szSqlText))//进行数据检索并检查有无错误 
       { 
           mysql_close( sock); 
           return FALSE ; 
       } 
       else 
       { 
          std::cout<<"mysql_store_result!"<<std::endl; 
           res=mysql_store_result( sock) ;//取得查询结果,保存查询到的数据到res 
           i = (int)mysql_num_rows(res ) ;//取得有效记录数 
          std::cout<<"Query:"<<szSqlText<<"\n"<<i<<" recordsfound:"<<std::endl; 
           for( i = 0 ; fd =mysql_fetch_field( res ); i++ )//获取列名 
             std::cout<<fd->name<<"\t"; 
          std::cout<<std::endl;//输出各字段名 
           while(row =mysql_fetch_row( res))//获取具体的数据,依次读取各条记录 
             std::cout<<row[0]<<"\t"<<row[1]<<"\t"<<row[2]<<"\t"<<row[3]<<"\t"<<row[4]<<std::endl; 
           mysql_free_result(res ); //释放结果资源 
       } 
    } 
    else//连接数据库出错 
    { 
       std::cout<<"cannot connect tothe sock sever "<<mysql_error(sock)<<std::endl; 
       mysql_close(sock); 
       return FALSE; 
    }

    mysql_close(sock);//断开连接 
    system("pause"); 
    return TRUE; 
}

 

 

关于添加中文后编译出错问题的解决

比如utf8,big5,gb2312.

在 MySQL 4.1 或更新版本, 如果你要使用中文,则必须用 UTF-8。 你要用 utf8 charset 来建立数据库: 
mysql> CREATE DATABASE bugzero_db CHARACTER SET utf8; 
或者,如果非utf8 数据库已经建立,你可用alter来改变:

mysql> ALTER DATABASE bugzero_db CHARACTER SETutf-8; 
注意,只有没有任何 tables 的情况下,ALTER DATABASE 才有效。

当然,如果 utf8 已经是你mysqlserver的默认charset,那么,上面步骤就不需要了

四、VC编程

MYSQL mysql; //数据库连接句柄mysql_init(&mysql);if(!mysql_real_connect(&mysql,"localhost","root",NULL,"mydb",3306,NULL,0)){//mydb为你所创建的数据库,3306为端口号,可自行设定 AfxMessageBox("数据库连接失败"); returnFALSE;}

(1)实现添加功能

CStringstrUsername,strList,strRemark,strSQL;strSQL.Format("insertinto mytable(username,visitelist,remark) values(\'%s\',\'%s\',\'%s\')",strUsername,strList,strRemark);//注意一定要写在一行,而且必须要有\'\'if(mysql_real_query(&mysql,(char*)(LPCTSTR)strSQL,(UINT)strSQL.GetLength())!=0){AfxMessageBox("增添失败"); }

(2)实现修改功能

CStringstrUsername,strList,strRemark,strSQL,str_PreName;//str_PreName用于记录想要修改的行,详情请看源代码strSQL.Format("updatemytable set username=\'%s\',visitelist=\'%s\', remark=\'%s\' whereusername=\'%s\'",strUsername,strList,strRemark,str_PreName);if(mysql_real_query(&mysql,(char*)(LPCTSTR)strSQL,(UINT)strSQL.GetLength())!=0){AfxMessageBox("修改失败"); }

(3)实现删除功能

CStringstrSQL;strSQL.Format("delete frommytable where username=\'%s\'",str_PreName);//必须要有\'\'if(mysql_real_query(&mysql,(char*)(LPCTSTR)strSQL,(UINT)strSQL.GetLength())!=0){AfxMessageBox("删除失败"); }

(4)读取表格内容到CListCtrl控件m_list

m_list.DeleteAllItems();char*ch_query;ch_query="select * from mytable";if(mysql_real_query(&mysql,ch_query,(UINT)strlen(ch_query))!=0){AfxMessageBox("数据库中表格出错"); }CStringstr;MYSQL_RES*result;MYSQL_ROWrow;if(!(result=mysql_use_result(&mysql))){AfxMessageBox("读取数据集失败"); }inti=0;while(row=mysql_fetch_row(result)){str.Format("%s",row[0]);m_list.InsertItem(i,str);str.Format("%s",row[1]);m_list.SetItemText(i,1,str);str.Format("%s",row[2]);m_list.SetItemText(i,2,str);i++;}mysql_free_result(result);
做一些添加: 
while (row=mysql_fetch_row(result)) 
{num=mysql_num_fields(result); 
for (int j=0;j<num;j++) 
...} 
mysql_fetch_row依次获取受影响的行,当结束时返回NULL,mysql_num_fields获取该行的列数。注意,这里的row是char** 类型,即row[i]是char*类型。

(5)关闭数据库

mysql_close(&mysql);//最好写到OnDestroy()函数中

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值