简介
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();
}