您的位置:首页 > 编程语言 > C语言/C++

C++访问MySql数据库

2013-08-14 19:15 183 查看
今天做了一个小程序,用使用C++控制台程序访问MySql数据库,当然可以一直到其他C++项目中。Mysql的安装在这就不说了,见点击打开链接

安装完毕之后,Mysql的安装目录C:\Program Files\MySQL\MySQL Server 5.5下有include和lib文件夹,在C++项目中,需要配置包含目录和库目录。然后将lib下的libmysql.dll放在C++动态链接库的文件夹中。最后需要下载WS2_32.Lib和ws2_32.dll分别放在C++的库目录和动态链接库目录下。项目配置就到这。

下面是DaoDatabase.h文件,是访问Mysql的类的头文件。

#include <windows.h>
#include <mysql.h>
#include <iostream>
using namespace std;
class DaoDatabase
{
private:
MYSQL mysql;
public:

DaoDatabase();
~DaoDatabase();
int ConnMySQL(char *host,char * port ,char * Db,char * user,char* passwd,char * charset,char * Msg);
string SelectData(char * SQL,int Cnum,char * Msg);
int InsertData(char * SQL,char * Msg);
int DaoDatabase::UpdateData(char * SQL,char * Msg);
int DaoDatabase::DeleteData(char * SQL,char * Msg);
void DaoDatabase::CloseMySQLConn();
};
下面是DaoDatabase.cpp文件,是访问Mysql的类的实现文件。

#include "DaoDatabase.h"
DaoDatabase::DaoDatabase()
{

}

DaoDatabase::~DaoDatabase()
{
}

//初始化数据
int DaoDatabase::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,"GBK") != 0)
{
Msg = "mysql_set_character_set Error";
return 1;
}
return 0;
}

//查询数据
string DaoDatabase::SelectData(char * SQL,int Cnum,char * Msg)
{
MYSQL_ROW m_row;
MYSQL_RES *m_res;
char sql[2048];
sprintf(sql,SQL);
int rnum = 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 "";
}
string str("");
while(m_row = mysql_fetch_row(m_res))
{
for(int i = 0;i < Cnum;i++)
{
str += m_row[i];
str += rg;
}
str += rg;
rnum++;
}
mysql_free_result(m_res);
return str;
}

//插入数据
int DaoDatabase::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 DaoDatabase::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 DaoDatabase::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 DaoDatabase::CloseMySQLConn()
{
mysql_close(&mysql);
}


这个类包括了常用的数据库操作,跟常用的数据库访问一样,操作数据库之前首先通过
mysql_init(&mysql)
得建立连接,然后通过
mysql_real_connect(&mysql,host,user,passwd,Db,0,NULL,0)
建立连接之后,才能对数据库进行操作。

以下是主程序,对数据库进行常用的操作。
#include "DaoDatabase.h"
#include<windows.h>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
char* host="localhost";
char* user="root";
char* port ="3306";
char* passwd="root";
char* dbname="firstdatabase";
char* charset = "GBK";//支持中文
char* Msg = "";//消息变量
//初始化
DaoDatabase * daoDatabase = new DaoDatabase();
if(daoDatabase->ConnMySQL(host,port,dbname,user,passwd,charset,Msg) == 0)
printf("连接成功/r/n");
else
printf(Msg);

//查询
char * SQL = "SELECT username,password FROM controllor";
string str = daoDatabase->SelectData(SQL,2,Msg);
if( str.length() > 0 )
{
printf("查询成功/r/n");
std::cout<<str.c_str()<<endl;
printf("/r/n");
}
else
{
printf(Msg);
}
//插入
SQL = "insert into controllor(username,password) values('feige','feige')";
if(daoDatabase->InsertData(SQL,Msg) == 0)
printf("插入成功/r/n");
////更新
//SQL = "update controllor set password='2345' where username = 'feige' ";
//if(daoDatabase->UpdateData(SQL,Msg) == 0)
//	printf("更新成功/r/n");
////删除
//SQL = "delete from controllor where ids = 'feige' ";
//if(daoDatabase->DeleteData(SQL,Msg) == 0)
//	printf("删除成功/r/n");

daoDatabase->CloseMySQLConn();

return 0;
}

对数据库的操作结果是放在一个MYSQL的数据类型中的通过mysql_query(&mysql,sql)可以将操作结果放入mysql中,然后通过mysql_store_result(&mysql)将结果集取出来。

以上程序是我根据从网上找的程序修改而来的,希望对大家有所帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: