分页显示t_log
1、获取用户的输入
1.1、写一个Input成员函数,处理输入进来的语句
std::string XClient::Input()
{//清空缓冲//cin.ignore(4096, '\n');string input = "";for (;;){char a = getchar();if (a <= 0 || a == '\n' || a == '\r')break;cout << "*" << flush;input += a;}return input;
}
1.2、将获取到的输入,传给cmd。定义vector容器,将得到的cmd输入进行分割,通过空格将内容分割成一块一块的。将分割好的内容写入vector容器里面
for (;;){cout << "Input: " << flush;string cmd = Input();cout << cmd << endl;//格式 log 1 10 第一页 1页10行//切割空格 通过空格把内容切成一块一块的vector<string>cmds;char* p = strtok((char*)cmd.c_str(), " ");while (p){cmds.push_back(p);p = strtok(0, " ");}string type = cmd;if (cmds.size() > 0)type = cmds[0];if (type == "log"){c_log(cmds); }}
C 库函数 char *strtok(char *str, const char *delim) 分解字符串 str 为一组字符串,delim 为分隔符。
参数
- str -- 要被分解成一组小字符串的字符串。
- delim -- 包含分隔符的 C 字符串。
2、将得到的内容进行分页展示
//log 1 10 第一页 每页10条
void XClient::c_log(std::vector<std::string> cmds)
{int pagecount = 10;int page = 1;if (cmds.size() > 1)page = atoi(cmds[1].c_str());if (cmds.size() > 2)pagecount = atoi(cmds[2].c_str());cout << "In log" << endl;//limit 0 10 从0开始取10条语句string sql = "select * from t_log limit ";stringstream ss;ss <<sql;//如果是第二页,那么从(2-1)*10=10个开始ss << (page - 1) * pagecount;ss << ",";ss << pagecount;sql = ss.str();auto rows = my->GetResult(sql.c_str());//遍历每一行for (auto row : rows){//遍历每一个字段 遍历每一列for (auto c : row){//打印出来cout << c.data << " ";}cout << endl;}//int total = 0;// cout << "Total: " << total << endl;cout << "page= " << page << " pagecount=" << pagecount << endl;
}
3、测试
3.1、输入log 6 5(其中log就是想要读取的字段,也就是cmds[0],6是第6页,5是每页5条数据 (也就是现有的log将它分为每页是5条数据))
3.2、分析结果,现在分页的是第6页,那么他应该从26条数据开始
select *from t_log limit 25,5