【TcaplusDB知識庫】PB表 C++ 示例程式碼-讀取資料
成功建立:叢集,表格組,tb_online表
tb_online表描述檔案 如下:( 為依賴表)
syntax = "proto3";
package myTcaplusTable;
//import tcaplusdb extensions
import "tcaplusservice.optionv1.proto";
message tb_online {
//define primary key
option( tcaplusservice. tcaplus_primary_key) = "openid,tconndid,timekey";
//primary key fields
int32 openid = 1; //QQ Uin
int32 tconndid = 2;
string timekey = 3;
//non-primary key fields
string gamesvrid = 4;
int32 logintime = 5 ;
repeated int64 lockid = 6;
pay_info pay = 7;
message pay_info {
uint64 total_money = 1;
uint64 pay_times = 2;
}
}
定義配置引數
// 目標業務的tcapdir地址
static const char DIR_URL_ARRAY[][ TCAPLUS_MAX_STRING_LENGTH] =
{
"tcp://10.191.***.99:9999"
};
// 目標業務的tcapdir 地址個數
static const int32_t DIR_URL_COUNT = 1;
// 目標業務的叢集ID
static const int32_t APP_ID = 3;
// 目標業務的表格組ID
static const int32_t ZONE_ID = 1;
// 目標業務的業務密碼
static const char * SIGNATURE = "*******";
// 目標業務的表名 tb_online
static const char * TABLE_NAME = "tb_online";
初始化TcaplusPB客戶端
//Tcaplus PB API客戶端
TcaplusAsyncPbApi g_stAsyncApi;
int32_t InitAsyncPbApi()
{
//PB API配置
ClientOptions cfg;
cfg. app_id = APP_ID;
cfg. zones. push_back( ZONE_ID);
strcpy( cfg. signature, SIGNATURE);
for ( int32_t i = 0; i < DIR_URL_COUNT; i ++)
{
cfg. dirs. push_back( DIR_URL_ARRAY[ i]);
}
//訪問的PB表
cfg. tables. push_back( TABLE_NAME);
//日誌配置
strncpy( cfg. log_cfg, "tlogconf.xml", sizeof( cfg. log_cfg));
//初始化連線超時時間5s
cfg. timeout = 5000;
//初始化連線
int32_t iRet = g_stAsyncApi. Init( cfg);
if ( 0 != iRet)
{
cout << "ERROR: g_stAsyncApi.Init failed, log cfg: " << cfg. log_cfg << ", iRet: " << iRet << "." << endl;
return iRet;
}
return iRet;
}
定義非同步回撥
//收到響應訊息計數
uint32_t g_dwTotalRevNum = 0;
class CommonCallback : public TcaplusPbCallback
{
public:
CommonCallback()
{
cout << "Init CommonCallback." << endl;
}
~CommonCallback()
{
cout << "Fini ~CommonCallback." << endl;
}
//收到響應訊息的回撥,msgs為獲取的記錄的陣列
int OnRecv( const std::vector < :: google::protobuf::Message *> & msgs)
{
cout << "OnRecv[" << msgs. size() << endl;
g_dwTotalRevNum ++;
for ( size_t idx = 0; idx < msgs. size(); idx ++)
{
tb_online * t = dynamic_cast < tb_online *>( msgs[ idx]);
if ( NULL == t)
{
cout << "ERROR: msgs[" << idx << "] not tb_online type." << endl;
return - 1;
}
cout << "---------- receive a response----------:" << endl;
cout << "openid=" << t -> openid() << endl;
cout << "tconndid=" << t -> tconndid() << endl;
cout << "timekey=" << t -> timekey() << endl;
cout << "gamesvrid=" << t -> gamesvrid() << endl;
cout << "logintime=" << t -> logintime() << endl;
for ( int32_t i = 0; i < t -> lockid_size(); i ++)
{
cout << "lockid[" << i << "]=" << t -> lockid( i) << endl;
}
tb_online_pay_info pay = t -> pay();
cout << "pay total_money=" << pay. total_money() << "; pay_times=" << pay. pay_times() << endl;
//獲取記錄的版本號
std::string version;
int iRet = g_stAsyncApi. GetMessageOption( * t, NS_TCAPLUS_PROTOBUF_API::MESSAGE_OPTION_DATA_VERSION, & version);
cout << "after GetMessageOption iRet= [" << iRet << "] version:" << version. c_str() << " msg:" << t << endl;
}
return 0;
}
//收到錯誤響應訊息的回撥
int OnError( const std::vector < :: google::protobuf::Message *> & msgs, int errorcode)
{
cout << "OnError[" << msgs. size() << endl;
g_dwTotalRevNum ++;
for ( size_t idx = 0; idx < msgs. size(); idx ++)
{
tb_online * t = dynamic_cast < tb_online *>( msgs[ idx]);
if ( NULL == t)
{
cout << "ERROR: msgs[" << idx << "] not tb_online type." << endl;
return - 1;
}
if ( TcapErrCode::TXHDB_ERR_RECORD_NOT_EXIST == errorcode)
{
cout << "ERROR: openid= " << t -> openid() << ", tconndid= " << t -> tconndid() << ", timekey= " << t -> timekey() << ", record not exists" << endl;
}
cout << "ERROR: openid = [" << t -> openid() << "], tconndid = [" << t -> tconndid() << "], timekey =[" << t -> timekey() << "] failed:%d" << errorcode << endl;
}
return 0;
}
//訊息超時的回撥
int OnTimeout( const std::vector < :: google::protobuf::Message *> & msgs)
{
cout << "OnTimeout[" << msgs. size() << endl;
for ( size_t idx = 0; idx < msgs. size(); idx ++)
{
tb_online * t = dynamic_cast < tb_online *>( msgs[ idx]);
if ( NULL == t)
{
cout << "TIMEOUT: msgs[" << idx << "] not tb_online type!" << endl;
return - 1;
}
cout << "TIMEOUT: openid = [" << t -> openid() << "], tconndid = [" << t -> tconndid() << "], timekey =[" << t -> timekey() << "] timeout" << endl;
}
return 0;
}
int OnFinish( const NS_TCAPLUS_PROTOBUF_API::MsgParam & param)
{
cout << "OnFinish: " << param. m_nOperation << " req: " << param. m_vecMsgs. size() << endl;
return 0;
}
};
傳送Get請求
int SendGetRequest( struct schedule * S, void* arg)
{
static tb_online t;
t. set_openid( 1);
t. set_tconndid( 1);
t. set_timekey( "test_tcaplus");
cout << "INIT: openid= " << t. openid() << ", tconndid= " << t. tconndid() << ", timekey=" << t. timekey() << endl;
static CommonCallback cb;
int32_t iRet = g_stAsyncApi. Get( & t, & cb);
if ( iRet != TcapErrCode::GEN_ERR_SUC)
{
cout << "ERROR: openid= " << t. openid() << ", tconndid= " << t. tconndid() << ", timekey= " << t. timekey() << ", Get Error iRet = " << iRet << endl;
return iRet;
}
return 0;
}
示例
main.cpp
int main( void) {
//初始化API客戶端
int ret = InitAsyncPbApi();
if ( ret != 0)
{
printf( "InitAsyncPbApi failed\n");
return - 1;
}
//傳送請求
ret = SendAddRequest();
if ( 0 != ret)
{
printf( "SendAddRequest failed\n");
return - 1;
}
//接收響應
do
{
// 更新,接收回包
g_stAsyncApi. UpdateNetwork();
usleep( 1000 * 10);
} while ( g_dwTotalRevNum != 1);
return 0;
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69982264/viewspace-2855913/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【TcaplusDB知識庫】PB表 C++ 示例程式碼-更新資料C++
- 【TcaplusDB知識庫】PB表C++示例程式碼-刪除資料C++
- 【TcaplusDB知識庫】什麼是TcaplusDB資料庫?資料庫
- 【TcaplusDB知識庫】TcaplusDB本地索引介紹索引
- 【TcaplusDB知識庫】TcaplusDB全域性索引介紹索引
- ajax讀取資料庫資料程式碼例項資料庫
- [TcaplusDB知識庫]TcaplusDB客戶端及常用命令客戶端
- [TcaplusDB知識庫]資料庫支撐底盤引擎計算層介紹資料庫
- 【TcaplusDB知識庫】預設Schema表型別介紹型別
- 【TcaplusDB知識庫】如何對陣列進行操作陣列
- 如何建立最簡單的 ABAP 資料庫表,以及編碼從資料庫表中讀取資料 (上)資料庫
- 【TcaplusDB知識庫】條件過濾說明與更新
- MySQL資料庫知識MySql資料庫
- 知識分享--資料庫資料庫
- 模型程式碼理解本地知識庫模型
- sqlserver讀取oracle資料庫資料SQLServerOracle資料庫
- 利用反射讀取資料庫資料反射資料庫
- 資料庫基礎知識資料庫
- 資料庫理論知識資料庫
- MySQL資料庫基本知識MySql資料庫
- Java 資料庫知識整理Java資料庫
- Python中檔案讀取與儲存程式碼示例Python
- eazyexcel 讀取excel資料插入資料庫Excel資料庫
- MySql連線資料庫常用引數及程式碼示例MySql資料庫
- 前端讀取Excel表中資料前端Excel
- QT知識整合--資料庫操作QT資料庫
- 基礎知識梳理~資料庫資料庫
- GEO資料庫基礎知識資料庫
- 資料庫安全知識介紹資料庫
- 資料庫基礎重要知識資料庫
- JSON for Modern C++ 庫的介紹與使用示例程式碼JSONC++
- SQL server資料庫建立程式碼 filegroup檔案組修改的示例程式碼SQLServer資料庫
- NPOI讀取示例
- .NET 5/.NET Core使用EF Core 5連線MySQL資料庫寫入/讀取資料示例教程MySql資料庫
- C++資料結構和pb資料結構的轉換C++資料結構
- 聊聊圖資料庫和圖資料庫的小知識資料庫
- C++學習筆記,知識點+程式碼測試C++筆記
- 資料庫相關知識點提要資料庫