You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

119 lines
4.9 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*
* Copyright (c) 2016 The ZLToolKit project authors. All Rights Reserved.
*
* This file is part of ZLToolKit(https://github.com/ZLMediaKit/ZLToolKit).
*
* Use of this source code is governed by MIT license that can be found in the
* LICENSE file in the root of the source tree. All contributing project authors
* may be found in the AUTHORS file in the root of the source tree.
*/
#include <iostream>
#include "Util/logger.h"
#if defined(ENABLE_MYSQL)
#include "Util/SqlPool.h"
#endif
using namespace std;
using namespace toolkit;
int main() {
//初始化日志 [AUTO-TRANSLATED:371bb4e5]
// Initialize log
Logger::Instance().add(std::make_shared<ConsoleChannel> ());
#if defined(ENABLE_MYSQL)
/*
* 测试方法:
* 请按照实际数据库情况修改源码然后编译执行测试
/*
* Test method:
* Please modify the source code according to the actual database situation and then compile and run the test
* [AUTO-TRANSLATED:0bf528e2]
*/
string sql_ip = "127.0.0.1";
unsigned short sql_port = 3306;
string user = "root";
string password = "111111";
string character = "utf8mb4";
#if defined(SUPPORT_DYNAMIC_TEMPLATE)
//初始化数据 [AUTO-TRANSLATED:62fabcf5]
// Initialize data
SqlPool::Instance().Init(sql_ip,sql_port,"",user,password/*,character*/);
#else
//由于需要编译器对可变参数模板的支持所以gcc5.0以下一般都不支持,否则编译报错 [AUTO-TRANSLATED:fde51ba6]
// Because compiler support for variable parameter templates is required, versions below gcc5.0 generally do not support it, otherwise a compilation error will occur
ErrorL << "your compiler does not support variable parameter templates!" << endl;
return -1;
#endif //defined(SUPPORT_DYNAMIC_TEMPLATE)
//建议数据库连接池大小设置跟CPU个数一致(大一点为佳) [AUTO-TRANSLATED:14ca5335]
// It is recommended to set the database connection pool size to be consistent with the number of CPUs (slightly larger is better)
SqlPool::Instance().setSize(3 + thread::hardware_concurrency());
vector<vector<string> > sqlRet;
SqlWriter("create database test_db;", false) << sqlRet;
SqlWriter("create table test_db.test_table(user_name varchar(128),user_id int auto_increment primary key,user_pwd varchar(128));", false) << sqlRet;
//同步插入 [AUTO-TRANSLATED:0c010898]
// Synchronous insertion
SqlWriter insertSql("insert into test_db.test_table(user_name,user_pwd) values('?','?');");
insertSql<< "zltoolkit" << "123456" << sqlRet;
//我们可以知道插入了几条数据,并且可以获取新插入(第一条)数据的rowID [AUTO-TRANSLATED:6c3fe4ae]
// We can know how many pieces of data were inserted, and we can get the rowID of the newly inserted (first) data
DebugL << "AffectedRows:" << insertSql.getAffectedRows() << ",RowID:" << insertSql.getRowID();
//同步查询 [AUTO-TRANSLATED:6f60ace1]
// Synchronous query
SqlWriter sqlSelect("select user_id , user_pwd from test_db.test_table where user_name='?' limit 1;") ;
sqlSelect << "zltoolkit" ;
vector<vector<string> > sqlRet0;
vector<list<string> > sqlRet1;
vector<deque<string> > sqlRet2;
vector<map<string,string> > sqlRet3;
vector<unordered_map<string,string> > sqlRet4;
sqlSelect << sqlRet0;
sqlSelect << sqlRet1;
sqlSelect << sqlRet2;
sqlSelect << sqlRet3;
sqlSelect << sqlRet4;
for(auto &line : sqlRet0){
DebugL << "vector<string> user_id:" << line[0] << ",user_pwd:"<< line[1];
}
for(auto &line : sqlRet1){
DebugL << "list<string> user_id:" << line.front() << ",user_pwd:"<< line.back();
}
for(auto &line : sqlRet2){
DebugL << "deque<string> user_id:" << line[0] << ",user_pwd:"<< line[1];
}
for(auto &line : sqlRet3){
DebugL << "map<string,string> user_id:" << line["user_id"] << ",user_pwd:"<< line["user_pwd"];
}
for(auto &line : sqlRet4){
DebugL << "unordered_map<string,string> user_id:" << line["user_id"] << ",user_pwd:"<< line["user_pwd"];
}
//异步删除 [AUTO-TRANSLATED:4359ab91]
// Asynchronous deletion
SqlWriter insertDel("delete from test_db.test_table where user_name='?';");
insertDel << "zltoolkit" << endl;
//注意! [AUTO-TRANSLATED:acc754b6]
// Note!
//如果SqlWriter 的 "<<" 操作符后面紧跟SqlPool::SqlRetType类型则说明是同步操作并等待结果 [AUTO-TRANSLATED:be2b37a9]
// If the "<<" operator of SqlWriter is followed by SqlPool::SqlRetType type, it indicates a synchronous operation and waits for the result
//如果紧跟std::endl ,则是异步操作在后台线程完成sql操作。 [AUTO-TRANSLATED:982b1ad9]
// If followed by std::endl, it is an asynchronous operation, which completes the sql operation in the background thread.
#else
ErrorL << "ENABLE_MYSQL not defined!" << endl;
return -1;
#endif//ENABLE_MYSQL
return 0;
}