protobuf C++ SQLite handle blob data



我有一个SQLite数据库,它有一个包含一些BLOB类型的字段的表。 我正在尝试做的是将字段(实际上所有其他字段(从数据库中获取到C++通过 protobuf 发送并接收 protobuf .

我已将 blob 字段定义为.proto文件中的bytes例如

message fields{
...
bytes myBlobField = 1;
}

我的 c++ 文件包含

sqlite3_initialize();
rc = sqlite3_open_v2(db_url, &db,SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,NULL);
std::ostringstream oss;
oss << "select * from attribtable ";
std::string query = oss.str();
rc = sqlite3_prepare_v2(db,query.c_str(),-1,&stmt,NULL
while(sqlite3_step(stmt) == SQLITE_ROW){
sqlite3_column_blob(stmt,10) //This is the blob field
}

如何将sqlite3_column_blob(stmt,10)存储在C++以及如何myBlobField使用 说reply->set_myblobfield(??)

并在客户端使用

say receive->get_myblobfield()

所以简单来说,我的问题是如何在C++应用程序中通过 protobuf 将从数据库获取的 blobfield 从服务器发送到客户端?

使用此 .proto 文件

syntax = "proto2";
package prototest;
message fields{
required bytes myBlobField = 1;
}

使用带有 Blob 指针的set_myblobfield()调用和从 SQLite 获取的 Blob 的字节大小来初始化 Blob,然后调用SerializeToOstream()方法将其写入流或文件。

std::ofstream myoutput("myoutput.bin");
while (sqlite3_step(stmt) == SQLITE_ROW)
{
if (size_t blobSize = sqlite3_column_bytes(stmt, 10))
{
if (const void* blob = sqlite3_column_blob(stmt, 10))
{
prototest::fields myfields;
myfields.set_myblobfield(blob, blobSize);
myfields.SerializeToOstream(&myoutput);
}
}
}

最新更新