#include<gflags/gflags.h>
#include<odb/database.hxx>
#include<odb/mysql/database.hxx>
#include"student_classes.hxx"
#include"student_classes-odb.hxx"
DEFINE_string(host,"127.0.0.1","主机号");
DEFINE_uint32(port,0,"端口号");
DEFINE_string(db,"qsy_test","mysql 数据库名");
DEFINE_string(user,"root","mysql 用户名");
DEFINE_string(pswd,"I5sLBKpqjGjPZi","mysql 用户密码");
DEFINE_string(cset,"utf8","mysql 客户端字符集");
DEFINE_int32(max_pool,3,"最大的连接池数");
void insert_student(odb::mysql::database &db){
try {
odb::transaction trans(db.begin());
Student s1(1,"张三",18,1);
Student s2(2,"李四",19,1);
Student s3(3,"王五",17,1);
Student s4(4,"赵六",21,2);
Student s5(5,"田七",20,2);
Student s6(6,"孙八",16,2);
Student s7(7,"罗九",26,2);
db.persist(s1);
db.persist(s2);
db.persist(s3);
db.persist(s4);
db.persist(s5);
db.persist(s6);
db.persist(s7);
trans.commit();
}catch(std::exception &e){
std::cout <<"数据插入失败:"<< e.what()<< std::endl;
}
}
void insert_classes(odb::mysql::database& db){
try {
odb::transaction trans(db.begin());
Classes c1("1 班");
Classes c2("2 班");
db.persist(c1);
db.persist(c2);
trans.commit();
}catch(const std::exception& e){
std::cout<<"数据插入失败"<< e.what()<<'\n';
}
}
void remove_student(odb::mysql::database& db){
try {
odb::transaction trans(db.begin());
typedef odb::query<Student> query;
db.erase_query<Student>(query::id ==4);
trans.commit();
}catch(const std::exception& e){
std::cerr <<"删除失败:"<< e.what()<<'\n';
}
}
Student select_student(odb::mysql::database &db){
Student ret;
try {
odb::transaction trans(db.begin());
typedef odb::query<Student> query;
typedef odb::result<Student> result;
result r(db.query<Student>(query::name =="张三"));
if(r.size()!=1){
std::cout <<"查询失败"<< std::endl;
return Student();
}
ret =*r.begin();
trans.commit();
}catch(const std::exception &e){
std::cerr <<"查询失败"<< e.what()<<'\n';
}
return ret;
}
void select_student_classes(odb::mysql::database& db){
try {
odb::transaction trans(db.begin());
typedef odb::query<struct classes_student> query;
typedef odb::result<struct classes_student> result;
result r(db.query<struct classes_student>(query::classes::id==1));
for(auto it = r.begin();it!=r.end();it++){
std::cout<<it->name<<" ";
std::cout<<it->age<<" ";
std::cout<<it->sn<<" ";
std::cout<<it->classes_name<<" ";
std::cout<<std::endl;
}
trans.commit();
}catch(const std::exception& e){
std::cout<<"查询失败:"<<e.what()<<std::endl;
}
}
void updata_student(odb::mysql::database &db, Student &stu){
try {
odb::transaction trans(db.begin());
db.update(stu);
trans.commit();
}catch(const std::exception& e){
std::cerr <<"更新失败:"<< e.what()<<'\n';
}
}
int main(int argc,char*argv[]){
google::ParseCommandLineFlags(&argc,&argv, true);
std::unique_ptr<odb::mysql::connection_pool_factory>cpf(
new odb::mysql::connection_pool_factory(FLAGS_max_pool,0));
odb::mysql::database db(FLAGS_user, FLAGS_pswd, FLAGS_db, FLAGS_host, FLAGS_port,"", FLAGS_cset,0, std::move(cpf));
select_student_classes(db);
return 0;
}