c++连接mysql数据库

网上有大量的连接教程

这边我只给出代码以及总结

 

#include <iostream>
#include <WinSock.h>
#include "include/mysql.h"
#include <Windows.h>

#pragma comment(lib,"wsock32.lib")
#pragma comment(lib,"libmysql.lib")

MYSQL mysql;//mysql连接
MYSQL_FIELD *fd;//字段列数组
char field[32][32];//存储字段名的 二维数组
MYSQL_RES* res;//这是一个查询结果集
MYSQL_ROW colum;
char query[150];
char * pwd="1314521";

//函数声明
bool ConnectDatabase(); //通过这个函数去连接数据库
void FreeConnect();//通过这个函数去释放链接
bool QueryDatabase1(); //查询1
bool QueryDatabase2(); //查询2 标准化查询
bool InsertData(); //插入表
bool ModifyData();//修改表
bool DeleteData(); //删除表

int main(int argc, char const *argv[])
{
	ConnectDatabase();
	QueryDatabase1();
	InsertData();
	QueryDatabase2();
	ModifyData();
	QueryDatabase2();
	DeleteData();
	QueryDatabase2();
	FreeConnect();
	system("pause");
	return 0;
}

//连接数据库
bool ConnectDatabase(){
	//初始化mysql
	mysql_init(&mysql); 

	//返回false则连接失败 否则连接成功
	if(!(mysql_real_connect(&mysql,"localhost","root",pwd,"test",0,NULL,0))){ //真正的连接数据库部分
	//中间分别是主机 用户名 密码 数据库名 端口号(可以谢忱0 或者是3306)
		cout<<"Error connecting to database:"<<mysql_error(&mysql)<<endl;
		return false;
	}
	else{
		cout<<"Connected..."<<endl;
		return true;
	}

}

//释放资源包括两部分 一部分是释放结果集 一部分是关闭连接
void FreeConnect(){ 
	//释放资源
	mysql_free_result(res);
	mysql_close(&mysql);
}

/*******数据库操作************/
/*
其实这边的每个数据库操作都是先写一个sql语句
然后用mysql_query(&mysql,query)
来完成 包括创建数据库或表 增删改查*/

//查询数据
bool QueryDatabase1(){
	sprintf(query,"select * from user;");
	//--------我们不难得出一个结论,所有的查询连接都是通过 mysql_init进行数据库连接
	mysql_query(&mysql,"set names gbk;"); //设置编码格式 set names gbk 也行 否则 cmd下中文会乱码
	//返回0则查询成功
	if(mysql_query(&mysql,query))
	{
		cout<"Query failed:"<<mysql_error(&mysql);
		return false;
	}else{
		cout<<"query success!"<<endl;

	}
	if(!(res = mysql_store_result(&mysql))){ //获取查询结果的结果集
		cout<<"can't get result from "<<mysql_error(&mysql);
		return false;
	}
	//打印数据行数
	cout<<"number of dataline returned :"<<mysql_affected_rows(&mysql)<<endl;

	//获取字段信息
	cahr *str_field[32];
	for(int i=;i<4;++i){ //在知道字段数量的情况下扩区字段名 即列名
		str_field[i]=mysql_fetch_field(res)->name;
	}
	for (int i = 0; i < count; ++i)
	{
		cout<<str_field[i]<<endl;
	}
	cout<<endl;

	//打印获取的数据
	while(colum = mysql_fetch_row(res)){
		cout<<colum[0]<<" "<<colum[1]<<" "<<colum[2]<<" "<<colum[3]<<endl; // column是列数组

	}
	return true;
}

//这个查询是标准化的 和base1的区别在于它的通用性更好 
bool QueryDatabase2(){
	mysql_query(&mysql,"set names gbk;");

	if(mysql_query(&mysql,"select * from user;")){
		cout<<"Query failed!"<<endl;
		return false;
	}
	else{
		cout<<"query success!"<<endl;

	}
	res = mysql_store_result(&mysql);
	//打印行数
	cout<<"number of dataline returned:"<<mysql_affected_rows(&mysql);
	for (int i = 0; i < mysql_fetch_field(&mysql); ++i)
	{
		strcpy(field[i],fd->name);
	}
	int len = mysql_num_field(res); //获取字段数
	for(int i=0;i<len;++i)
	{
		cout<<field[i]<<endl;
	}
	cout<<endl;
	while(colum = mysql_fetch_row(res)){
		for (int i = 0; i < j; ++i)
		{
			cout<<colum[i]<<"\t";
		}
		cout<<endl;
	}
	return true;
}

//快速插入一行数据
bool InsertData(){
	string values;

	cout<<"Please input values like(name,age,height...)";
	cin>>values;
	sprintf(query,"INSERT INTO user values(%s);",values.data());
	if(mysql_query(&mysql,query)){ //执行 sql语句
		cout<<"query failed : "<<mysql_error(&mysql);
		return false;
	}else{
		cout<<"insert success!"<<endl;
		return true;
	}
}

//修改数据

bool ModifyData(){
	string s;
	cout<<"input the information tha you wanna modify(such as emall='123@123.com' where name = 'lilei'";
	getline(cin,s);
	sprintf(query,"update user set%s",s);
	if(mysql_query(&mysql,query)){
		cout<<"query failed!"<<endl;
		return false;
	}else{
		cout<<"midify success!"<<endl;
		return true;
	}
}

//删除数据
bool DeleteData(){
	cout<<"enter the drop order"<<endl;

	string ss;
	getline(cin,ss);

	if(mysql_query(&mysql,ss)){
		cout<<"query failed"<<endl;
		return false;
	}else{
		cout<<"Delete success!"<<endl;
		return true;
	}


}

不难看出,答题的步骤无非:初始化MySQL,与数据库建立连接, 进行相关操作后释放资源。

仅仅是几个简单的api 掌握即可

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值