tars 常用类用法总结一

一.配置类——taf::TC_Config

定义配置文件的类,与配置操作相关的类。

1.主要成员函数及数据成员

class TC_Config
{
public:
     TC_Config();   //构造函数
     TC_Config(const TC_Config &tc);   //构造函数
     TC_Config&    operator=(const TC_Config &tc);    //复制构造函数
     void     parseFile(const string& sFileName);      //解析文件
     void     parseString(const string& buffer);       //解析字符串
     string   operator[](const string &sName);       //通过下标获取值
     string   get(const string &sName, const string &sDefault="") const;    //获取值
     bool     getDomainMap(const string &path, map<string, string> &m) const;   //获取域下面的参数值对
     map<string, string> getDomainMap(const string &path) const;      //获取域下面的参数值对,不存则返回空map. 
     vector<string>      getDomainKey(const string &path) const;         //获取域下面的所有key, 按照文件的行顺序返回.
     bool     getDomainVector(const string &path, vector<string> &v) const;  //获取域下面的子域. 
     vector<string>      getDomainVector(const string &path) const;     //获取域下面的子域, 不存在则返回空vector
     string   tostr() const;       //转换成配置文件的字符串格式. 
     
protected:
     void parse(istream &is);      //输入流
     TC_ConfigDomain *newTcConfigDomain(const string& sName);     //生成子域
     TC_ConfigDomain *searchTcConfigDomain(const vector<string>& domains);      //搜索域
     const TC_ConfigDomain *searchTcConfigDomain(const vector<string>& domains) const;
 
 protected:
     TC_ConfigDomain _root;
};

2.基本使用

<Main> 
    <Domain> 
     Name = Value 
    </Domain> 
    <Domain1> 
     Name = Value 
    </Domain1> 
</Main>

如图 < Main > 可以看成是一个域,而 < Domain >< Domain1 > 可以理解为是 < Main > 的子域。
当我们要使用 TC_Config 类对象进行操作时,需要先执行 parseFile()parseString() 函数。然后,如果我们要取得某个子域下的全部配置,就可以执行 getDomainMap() 函数,注意传入的路径 path 要写成 域/子域 的形式。比如你要取得子域 < Domain > 下的配置,那么就应该这样 getDomainMap(“Main/Domain”) 调用函数。

二.Mysql 操作类——taf::TC_Mysql

初始化 Mysql 配置,连接数据库等。

1.主要成员函数及数据成员

class TC_Mysql 
 {
 public:
     TC_Mysql();   //构造函数
     TC_Mysql(const string& sHost, const string& sUser = "", const string& sPasswd = "", const string& sDatabase = "", const string &sCharSet = "", int port = 0, int iFlag = 0);   //构造函数
     TC_Mysql(const TC_DBConf& tcDBConf);  //构造函数
     ~TC_Mysql();  //析构函数
     
     void init(const string& sHost, const string& sUser  = "", const string& sPasswd  = "", const string& sDatabase = "", const string &sCharSet = "", int port = 0, int iFlag = 0);   //初始化
     void init(const TC_DBConf& tcDBConf);    //初始化
     void connect();     //连接数据库
     void disconnect();   //断开数据库连接

     MysqlData queryRecord(const string& sSql);      //查询数据
     size_t updateRecord(const string &sTableName, const map<string, pair<FT, string> > &mpColumns, const string &sCondition);      //更新记录
     size_t insertRecord(const string &sTableName, const map<string, pair<FT, string> > &mpColumns);    //插入记录
     size_t replaceRecord(const string &sTableName, const map<string, pair<FT, string> > &mpColumns);   //替换记录
     size_t deleteRecord(const string &sTableName, const string &sCondition = "");     //删除记录
 
 private:
     MYSQL               *_pstMql;      //数据库指针
     TC_DBConf           _dbConf;       //数据库配置
     bool                _bConnected;   //数据库是否连接标志
     string              _sLastSql;     //追后执行的 sql 语句
};

2.基本使用

首先需要实例化出一个类对象,再通过该对象调用 init() 函数初始化 Mysql 配置,然后再调用 connect() 函数连接上 Mysql 后即可进行查询,修改,新增,删除等操作。

数据库初始化可以通过一个个传入参数来完成,也能通过传入 TC_DBConf 结构来完成初始化。

TC_DBConf
struct TC_DBConf
{
     string _host;    //主机地址
     string _user;    //用户名
     string _password;   //密码
     string _database;   //数据库名
     string _charset;    //字符集
     int _port;          //端口号
     int _flag;          //客户端标识
 
     void loadFromMap(const map<string, string> &mpParam)
     {
         map<string, string> mpTmp = mpParam;
 
         _host        = mpTmp["dbhost"];
         _user        = mpTmp["dbuser"];
         _password    = mpTmp["dbpass"];
         _database    = mpTmp["dbname"];
         _charset     = mpTmp["charset"];
         _port        = atoi(mpTmp["dbport"].c_str());
         _flag        = 0;
     }
 };

看一个例子:

TC_Mysql      _propmysql;    //数据库操作类对象
TC_Config     conf;         //配置操作类对象
TC_DBConf     queryRspDbConf;    //数据库配置结构体

conf.parseFile(ServerConfig::BasePath + ServerConfig::ServerName + ".conf");     //解析配置文件,并分为不同的域
map<string, string> rspdb = conf.getDomainMap("/config/querypropertydb");        //将配置文件数据转化为 map 数据存储 
queryRspDbConf.loadFromMap(rspdb);     //将数据转入 TC_DBConf 结构

_propmysql.init(queryRspDbConf);   //使用配置文件初始化数据库
_propmysql.connect();              //连接数据库

三.Mysql 数据类——taf::TC_Mysql::MysqlData

主要用于接收,存储从 Mysql 读取出来的数据。

1.主要成员函数及数据成员

class MysqlData
{
public:
    vector<map<string, string> >& data();   //返回从 Mysql 查询到的数据
    size_t size();     //返回查询到的数据总条数
    MysqlRecord operator[](size_t i);  //重载 [] 运算符,通过下标获取数据

protected:
    vector<map<string, string> > _data;    //存储 Mysql 数据,其中存储在 Map 中的数据是以 <字段,值> 的形式存储
};

2.基本使用

首先创建一个 TC_Mysql::MysqlData 类对象 Data,再调用 TC_Mysql 类对象的 queryRecord() 方法。传入要执行的 sql 语句,并把返回结果赋值给 Data 就行了。

Data = mysql.queryRecord(sql);  

四.网络端口类——taf::TC_Endpoint

用于表示一个网络端口,执行网络端口的一些基本操作。

1.主要成员函数及数据成员

class TC_Endpoint
{
public:
     void    setHost(const string& host);  //设置ip 
     string  getHost() const;            //获取ip 
     void    setPort(int port);            //设置ip
     int     getPort() const;               //得到端口
     void    setTimeout(int timeout);      //设置超时时间 
     int     getTimeout() const;            //获取超时时间
     bool    isTcp() const;                //是否是TCP, 否则则为UDP  
     void    setTcp(bool bTcp);            //设置为TCP或UDP 
     int     getGrid() const;               //获取路由状态 
     void    setGrid(int grid);            //设置路由状态
     bool    isUnixLocal() const;          //是否是本地套接字
     void    parse(const string &desc);    //字符串形式的端口
      
protected:
     std::string _host;             //ip
     int         _port;             //端口
     int         _timeout;          //超时时间
     int         _istcp;            //TCP UDP 标志
     int         _grid;             //路由状态
};

2.基本使用

通过 OBJ 名获取对应服务器 IP

string obj;                //obj 是某个服务名方法
vector<string> IPs;        //存储 ip
vector<TC_Endpoint> vtHost;       //网络端口数组
int iRet = EndPointHelper::getEndPoint(obj, vtHost);      //获取该 obj 对应的 TC_Endpoint,可能不止一个,所以用数组存储
for(auto& ep : vtHost)     //通过 getHost 方法获取 ip
    IPs.push_back(ep.getHost());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值