C++ 如何使用libpqxx从数组中获取值?

C++ 如何使用libpqxx从数组中获取值?,c++,postgresql,libpqxx,C++,Postgresql,Libpqxx,如何使用libpqxx从数组中获取值?例如,我有这样的表: CREATE TABLE testTable ( testArray integer[] ); 我如何在C++中获得这些数组的值?< /p> < p>我没有发现任何其他方法: result wynikiJednostki(ncWykonaj.exec("SELECT * FROM testTable;")); result::const_iterator rekord = wynikiJednostki.begin() vector

如何使用libpqxx从数组中获取值?例如,我有这样的表:

CREATE TABLE testTable
(
 testArray integer[]
);

我如何在C++中获得这些数组的值?< /p> < p>我没有发现任何其他方法:

result wynikiJednostki(ncWykonaj.exec("SELECT * FROM testTable;"));
result::const_iterator rekord = wynikiJednostki.begin()
vector<unsigned short>* values = getArray(record[1].as<string>());
result-wynikiJednostki(ncWykonaj.exec(“从testTable中选择*”);
结果::const_迭代器rekord=wynikiJednostki.begin()
vector*values=getArray(记录[1].as());
getArray:

vector<unsigned short>* getArray(string pString)
{
vector<unsigned short>* numbers = new vector<unsigned short>;

pString += ',';
size_t begin = pString.find('{') + 1;
size_t end = pString.find('}');
size_t actualPosition;
string numberS;

while(true)
{
    actualPosition = pString.find(',', begin);
    if(actualPosition > end)
    {
        numberS = pString.substr(begin, end - begin);
        numbers->push_back(atoi(numberS.c_str()));

        return numbers;
    }
    numberS = pString.substr(end, actualPosition - begin);
    numbers->push_back(atoi(numberS.c_str()));
    begin = actualPosition + 1;
}
}
vector*getArray(字符串pString)
{
矢量*数字=新矢量;
pString+=',';
size_t begin=pString.find('{')+1;
size_t end=pString.find('}');
尺寸与实际位置;
字符串编号;
while(true)
{
actualPosition=pString.find(','开始);
如果(实际位置>结束)
{
数字=pString.substr(开始,结束-开始);
数字->推回(atoi(numbers.c_str());
返回号码;
}
数字=pString.substr(结束,实际位置-开始);
数字->推回(atoi(numbers.c_str());
开始=实际位置+1;
}
}

暂时我使用它,但我认为这不是最好的方法。

在7.2版中,我使用
as\u array
方法解析整数数组:

list<unsigned long> found_messages;
pqxx::result res = db->execute(query);
auto arr = res[0][0].as_array();
pair<pqxx::array_parser::juncture, string> elem;
do
{
    elem = arr.get_next();
    if (elem.first == pqxx::array_parser::juncture::string_value)
        found_messages.push_back(stoul(elem.second));
}
while (elem.first != pqxx::array_parser::juncture::done);
列出已找到的\u消息;
pqxx::result res=db->execute(查询);
自动arr=res[0][0]。作为数组();
成对元素;
做
{
elem=arr.get_next();
if(elem.first==pqxx::数组\语法分析器::连接::字符串\值)
找到消息。推回(stoul(elem.second));
}
while(elem.first!=pqxx::array\u parser::juncture::done);
那里(现在?可能不是在2015年)存在
字段::as_array
,它返回一个
array_parser
对象,该对象似乎完成了这个任务,但它的一些复杂之处没有记录在案。。。如果我让它工作,我可能会添加一个更详细的答案。