c++ 使用mysql++ 操作数据库进行增删改查

简介

MySQL++是官方发布的一套C++ API;
MySQL++是对MySQL和MariaDB C api的再次封装,是 MySQL C API 的强大 C ++包装器(使用 STL 容器);它建立在与标准c++库相同的原则之上,使处理数据库如同处理std容器(STL)一样简单。MySQL++还提供了一些工具,可以让您在自己的代码中避免重复的SQL,为这些常见任务提供了本地c++接口。

项目简介

我运行了mysql++文件中的resetdb,自动创建练习数据库,编写一个基于控制台的用户程序对此数据库增删改查。

#include <iostream>
#include <errno.h>
#include <mysql++/mysql++.h>
using namespace std;

/*
mysql -uroot -proot123
use MySQLCrashCourse
select * from customers;
*/
using Func =void (*)();
struct Ctos{
	Func func;
	string desc; 
};

 
mysqlpp::Connection conn;
void quit();
void add();
void show();
void del();
void mod();
void findByName();
void findByNo();
Ctos ctos[]={
	{quit,"quit"},
	{show,"show"},
	{add,"add"},
	{del,"delete"},
	{mod,"modify"},
	{findByName,"find by name"},
	{findByNo,"find by no"}
}; 
void menu(){
	for(int i=0;i<sizeof(ctos)/sizeof(Ctos);i++){
		cout<<i<<" "<<ctos[i].desc<<"   ";
	}
	cout<<endl<<"<<<";
}
void run(){
	while(1){
		menu();
		int opt=0;
		cin>>opt;
		if(opt>=0&&opt<sizeof(ctos)/sizeof(Ctos))
			ctos[opt].func();
		else
			cout<<"wrong option"<<endl;
	}
}
void show(){
	cout<<"show()"<<endl;
	mysqlpp::Query query1=conn.query("select * from stock");
	if(mysqlpp::StoreQueryResult res=query1.store()){
		cout.setf(ios::left);
		cout<<setw(31)<<"item"
		<<setw(10)<<"num"
		<<setw(10)<<"weight"
		<<setw(10) << "price"
		<<"sdate"<<endl;

		for(size_t i=0;i<res.num_rows();i++){
			cout<<setw(30)<<res[i]["item"]
			<<setw(9)<<res[i]["num"]
			<<setw(10)<<res[i]["weight"]
			<<setw(10)<<res[i]["price"]
			<<setw(9) << res[i]["sdate"]<<endl;
		}
	}else{
		cerr<<"Failed to get item list"<<query1.error()<<endl;
		
	}
}
void quit(){
	cout<<"bye"<<endl;

	
	exit(0);
}

void add(){
	cout<<"add()"<<endl;
	cout<<"input item num weight price sdate"<<endl;
	string item,num,weight,price,sdate;
	cin>>item>>num>>weight>>price>>sdate;

	string input="";
	input+="'"+item+"'"+" , "+num+" , "+weight+" , "+price+" , "+"'"+sdate+"'";
	string querystr="insert into stock values(";
	//cout<<"querystr : "<<querystr<<endl;
	querystr+=input+","+"'NULL'"+" );";
	cout<<"querystr : "<<querystr<<endl;
	mysqlpp::Query query2=conn.query();
	query2<<querystr;
	cout<<"exe query: "<<query2<<endl;
	query2.execute();
	show();
}

void del(){
	cout<<"del()"<<endl;
	cout<<"input item you want to delete"<<endl;
	string item;
	cin>>item;
	string querystr="delete from stock where item = ";
	querystr+="'"+item+"' ;";
	mysqlpp::Query query=conn.query(querystr);
	query.execute();
	show();
}
void mod(){
	cout<<"mod()"<<endl;
	cout<<"input item you want to modify"<<endl;
	string name;
	cin>>name;
	cout<<"input update item num weight price :";
	string item,num,weight,price,date;
	cin>>item>>num>>weight>>price>>date;
	
	string querystr="update  stock set item = ";
	querystr+="'"+item+"' ,"+" num ="+num+", weight = "
		+weight+", price= "+price+", sdate= '"+date+"' where item ="+"'"+name+"'";
	cout<<"querystr:"<<querystr<<endl;
	mysqlpp::Query query=conn.query(querystr);
	query.execute();
	show();

}
void findByName(){	
	cout<<"findByName()"<<endl;
	cout<<"input item name: ";
	string name;
	cin>>name;
	string querystr="select * from stock where item = ";
	querystr+="'"+name+"' ;";
	mysqlpp::Query query=conn.query(querystr);
	if (mysqlpp::StoreQueryResult res = query.store()) 
    { 
    	if(res.num_rows()==0){
    		cout<<"not found any data"<<endl;
    		return;
    	}
    	for (size_t i = 0; i < res.num_rows(); i++)
			{
				cout << setw(30) << res[i]["item"]
					 << setw(9) << res[i]["num"]
					 << setw(9) << res[i]["weight"]
					 << setw(9) << res[i]["price"]
					 << setw(9) << res[i]["sdate"] << endl;
			}
    } 

    else 
    { 
     cerr << "Failed to get item list: " << query.error() << endl; 
    } 
}
void findByNo(){
	cout<<"findByNo()"<<endl;
	cout<<"findByName()"<<endl;
	cout<<"input item num: ";
	string num;
	cin>>num;
	string querystr="select * from stock where num = ";
	querystr+="'"+num+"' ;";
	mysqlpp::Query query=conn.query(querystr);
	if (mysqlpp::StoreQueryResult res = query.store()) 
    { 
    	if(res.num_rows()==0){
    		cout<<"not found any data"<<endl;
    		return;
    	}
    	for (size_t i = 0; i < res.num_rows(); i++)
			{
				cout << setw(30) << res[i]["item"]
					 << setw(9) << res[i]["num"]
					 << setw(9) << res[i]["weight"]
					 << setw(9) << res[i]["price"]
					 << setw(9) << res[i]["sdate"] << endl;
			}
    } 

    else 
    { 
     cerr << "Failed to get item list: " << query.error() << endl; 
    } 
}
int main(int argc, char *argv[])
{
	conn=false;
	if (conn.connect("mysql_cpp_data", "127.0.0.1", "swe", "123"))
		cout<<"connect success"<<endl;
	else{
		cout<<"connect error"<<endl;
		exit(1);
	}
	run();
	
}

运行测试

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值