2016-1-8 windows 7下安装mysql及其配置和运用
绪言
最近学习了一下mysql的相关用法,以及vs2010结合mysql的使用。
遇到的问题:1、安装mysql 5.6 绿色免安装版本,出现mysql server not connect localhost 10061错误
2、安装mysql 5.7 ,command line出现闪退和mysql server not connect localhost 10061错误根本解决
3、vs2010配置mysql,无法连接mysql的错误
一、免安装版本启动mysql的方法
主要是配置文件配置错误:
1、进入mysql安装目录找到my-defaults.ini(安装或者免安装版的名称),将该名称修改为my.ini(注意.ini为该文件类型)
2、打开my.ini配置文件,修改port(mysql接入端口),basedir(mysql安装目录),datadirport(mysql数据库的数据的存放目录) 。
附上我的my.ini的配置文件内容:
3、启动mysql
第一步:打开cmd命令行,cd到安装根目录路(bin)下(例如:进入mysql安装的磁盘下,cd mysql\mysql 5.6\bin)
第二步:然后运行命令 mysql -uroot -p(或者mysql -u root -p),若出现下面错误
一般是mysql服务没有启动,解决方法:(查看mysql服务有没有启动,可以打开控制面板-管理-服务,找到mysql的运行方式改改为自启动)
这里我采用一种更笨的方法,无论是否启动,我们先执行下一条命令:
mysqld -nt -remove(卸载mysql服务)
再执行mysqld -nt -install
再输入 mysql -uroot -p
得到如下图:
则说明顺利进入了mysql命令行中。
二、解决command line 闪退现象和mysql server not connect localhost 10061错误根本解决
1、进入mysql安装目录找到my-defaults.ini(安装或者免安装版的名称),将该名称修改为my.ini(注意.ini为该文件类型),打开my.ini配置文件,修改port(mysql接入端口),basedir(mysql安装目录),datadirport(mysql数据库的数据的存放目录) 。
2、(根本解决启动mysql失败方法),附件-运行,输入regedit
3、在如图的目录树中找到mysql项,双击进入找到ImagePath这一项,
4、修改ImagePath中的路径(启动mysqld的路径),mysqld.exe在安装根目录下,只需要把该路径添加进去。(注意后面如有--defaults-files=d:Mysql,则将该句删掉,仅保留你的mysqld路径即可)
5、重新启动计算机,cmd中运行命令mysql -uroot -p或者mysql command line 即可运行mysql数据库。
总结:这种方法从根本上解决了启动mysql服务问题,不用每次开机繁琐的去执行mysqld -nt -remove ,mysqld -nt -install等命令。
三、Vs2010配置mysql
1、将mysql安装目录中include的路径写入vs2010项目属性配置的包含目录
将mysql安装目录中lib的路径写入vs2010项目属性配置的库目录
将libmysql.lib写入连接器-输入-附加依赖项
系统环境变量的配置;
打开系统环境变量,找到path,在path里添加mysql安装目录中lib文件的路径
vs2010配置mysql的完成。
四、一个可以运行的结合mysql的c++文件
#ifndef _VSPD_H
#define _VSPD_H
#include <Windows.h>
#include <string>
#include <mysql.h>
#include <iostream>
using namespace std;
class VspdCToMySQL
{
public:
//变量
MYSQL mysql;
/*
1、构造函数和稀构函数
*/
VspdCToMySQL();
~VspdCToMySQL();
/*
ConnMySQL();
主要的功能:
初始化数据库
连接数据库
设置字符集
入口参数:
host :MYSQL服务器IP
port:数据库端口
Db:数据库名称
user:数据库用户
passwd:数据库用户的密码
charset:希望使用的字符集
Msg:返回的消息,包括错误消息
出口参数:
int :0表示成功;1表示失败
*/
int ConnMySQL(char *host,char * port,char * Db,char * user,char* passwd,char * charset,char * Msg);
/*
主要的功能:
查询数据
入口参数:
SQL:查询的SQL语句
Cnum:查询的列数
Msg:返回的消息,包括错误消息
出口参数:
string 准备放置返回的数据,多条记录则用0x06隔开,多个栏位用0x05隔开
如果 返回的长度= 0,责表示舞结果
*/
string SelectData(char * SQL,int Cnum ,char * Msg);
/*
主要功能:
插入数据
入口参数
SQL:查询的SQL语句
Msg:返回的消息,包括错误消息
出口参数:
int :0表示成功;1表示失败
*/
int InsertData(char * SQL,char * Msg);
/*
主要功能:
修改数据
入口参数
SQL:查询的SQL语句
Msg:返回的消息,包括错误消息
出口参数:
int :0表示成功;1表示失败
*/
int UpdateData(char * SQL,char * Msg);
/*
主要功能:
删除数据
入口参数
SQL:查询的SQL语句
Msg:返回的消息,包括错误消息
出口参数:
int :0表示成功;1表示失败
*/
int DeleteData(char * SQL,char * Msg);
/*
主要功能:
关闭数据库连接
*/
void CloseMySQLConn();
};
#endif
#include "VspdCTOMySQL.h"
VspdCToMySQL::VspdCToMySQL()
{
}
VspdCToMySQL::~VspdCToMySQL()
{
}
//初始化数据
int VspdCToMySQL::ConnMySQL(char *host,char * port ,char * Db,char * user,char* passwd,char * charset,char * Msg)
{
if( mysql_init(&mysql) == NULL )
{
Msg = "inital mysql handle error";
return 1;
}
if (mysql_real_connect(&mysql,host,user,passwd,Db,0,NULL,0) == NULL)
{
Msg = "Failed to connect to database: Error";
return 1;
}
if(mysql_set_character_set(&mysql,charset) != 0)
{
Msg = "mysql_set_character_set Error";
return 1;
}
return 0;
}
//查询数据
string VspdCToMySQL::SelectData(char * SQL,int Cnum,char * Msg)
{
MYSQL_ROW m_row;
MYSQL_RES *m_res;
char sql[2048];
sprintf(sql,SQL);
int rnum = 0;
int cnum = 0;
char rg = 0x06;//行隔开
char cg = {0x05};//字段隔开
if(mysql_query(&mysql,sql) != 0)
{
Msg = "select ps_info Error";
return "";
}
m_res = mysql_store_result(&mysql);
if(m_res==NULL)
{
Msg = "select username Error";
return "";
}
cnum=mysql_num_fields(m_res); //获取数据库的列数
cnum=cnum>Cnum?Cnum:cnum;
cout<<"cnum:"<<cnum<<endl;
string str("");
while(m_row = mysql_fetch_row(m_res))
{
for(int i = 0;i < cnum;i++)
{
if(m_row!=NULL)
{
str += m_row[i];
str+=0x09;
}
else
{
str+="NULL";
}
}
str +="\n";
rnum++;
}
cout<<"rnum:"<<rnum<<endl;
mysql_free_result(m_res);
return str;
}
//插入数据
int VspdCToMySQL::InsertData(char * SQL,char * Msg)
{
char sql[2048];
sprintf(sql,SQL);
if(mysql_query(&mysql,sql) != 0)
{
Msg = "Insert Data Error";
return 1;
}
return 0;
}
//更新数据
int VspdCToMySQL::UpdateData(char * SQL,char * Msg)
{
char sql[2048];
sprintf(sql,SQL);
if(mysql_query(&mysql,sql) != 0)
{
Msg = "Update Data Error";
return 1;
}
return 0;
}
//删除数据
int VspdCToMySQL::DeleteData(char * SQL,char * Msg)
{
char sql[2048];
sprintf(sql,SQL);
if(mysql_query(&mysql,sql) != 0)
{
Msg = "Delete Data error";
return 1;
}
return 0;
}
//关闭数据库连接
void VspdCToMySQL::CloseMySQLConn()
{
mysql_close(&mysql);
}
#include "VspdCTOMySQL.h"
int main(int argc, char* argv[])
{
char* host="localhost";
char* user="root";
char* port ="3306";
char* passwd="";
char* dbname="image";
char* charset = "GBK";//支持中文
char* Msg = "";//消息变量
//初始化
VspdCToMySQL * vspdctomysql = new VspdCToMySQL;
if(vspdctomysql->ConnMySQL(host,port,dbname,user,passwd,charset,Msg) == 0)
printf("连接成功\n");
else
printf(Msg);
//查询
char * SQL = "SELECT id,number FROM abc";//从数据库image表abc查询id,name项的值
string str = vspdctomysql->SelectData(SQL,3,Msg);
if( str.length() > 0 )
{
printf("查询成功\n");
printf(str.data());
printf("\r\n");
}
else
{
printf(Msg);
}
//插入
SQL = "insert into abc values('fh','10')";
if(vspdctomysql->InsertData(SQL,Msg) == 0)
printf("插入成功\n");
//更新
//SQL = "update vcaccesstest set username = '修改了',passwd='2345' where ids = 3 ";
//if(vspdctomysql->UpdateData(SQL,Msg) == 0)
// printf("更新成功/r/n");
//删除
//SQL = "delete from vcaccesstest where ids = 3 ";
//if(vspdctomysql->DeleteData(SQL,Msg) == 0)
// printf("删除成功/r/n");
// vspdctomysql->CloseMySQLConn();
return 0;
}