C++访问MySql数据库

本文介绍如何使用C++控制台程序访问MySQL数据库,并提供一个完整的示例代码,包括数据库连接、查询、插入等基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天做了一个小程序,用使用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)将结果集取出来。

以上程序是我根据从网上找的程序修改而来的,希望对大家有所帮助。

C++访问MySQL #include "stdafx.h" #include #include #include int main(int argc,char* argv[])   {     char *user ="root", *pwd ="123456", *dbname = "chardb";     MYSQL  mysql;     MYSQL_RES  *mysql_ret;     MYSQL_ROW  mysql_row;     unsigned  long  num_rows;     int  ret;     mysql_init(&mysql);     if(mysql_real_connect(&mysql,NULL,user,pwd,dbname,0,NULL,0))     {       printf("连接成功!n");       ret  =  mysql_query(&mysql,"select  *  from  accounts");       if(!ret)       {         printf("查询成功!n");         mysql_ret  =  mysql_store_result(&mysql);         if(mysql_ret  !=  NULL)         {           printf("存储结果成功!n");           num_rows  =  mysql_num_rows(mysql_ret);           if(num_rows  !=  0)           {             printf("%dn",num_rows);             while(mysql_row  =  mysql_fetch_row(mysql_ret))             {               printf("%st%st%st%st%st%sn",mysql_row[0],mysql_row[1],mysql_row[2],mysql_row[3],mysql_row[4],mysql_row[5]);             }           }           else           {             exit(-1);           }           mysql_free_result(mysql_ret);           exit(0);         }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值