1

我正在尝试使用 occi 库构建一个 C++ 程序,该程序将选择语句或表名作为输入并将其转换为分隔文件。但是,查看文档,我找不到将查询结果的所有列导出到文件中的方法。我发现的几乎所有示例都如下所示

string query = "SELECT col1 FROM table1";

stmt = con->createStatement(query);
res = stmt->executeQuery();

while (res->next())
{
    outfile<<res->getInt(1)<<endl;
}

我想要做的是:做一个select *然后将整行导出到文件中而不指定每一列的类型,但我一直无法找到这样做的东西。

我知道逐行导出对于大型集合并不是很有效,但我想在优化它之前完成这项工作。

有没有人对如何有效地做到这一点有任何想法?

4

2 回答 2

0

我发现如果不至少迭代一次元数据对象,就没有办法做到这一点。由于每次查询执行只需要执行一次,我最终将属性类型和列位置写入映射,并在结果集循环中使用该映射来读取数据。这是我使用的代码:

    res = stmt->executeQuery();
    vector<oracle::occi::MetaData> meta = res->getColumnListMetaData();
    map<int, int> mapper;

    for (int i=0; i < meta.size(); i++) {
            mapper[i] = meta[i].getInt(oracle::occi::MetaData::ATTR_DATA_TYPE);
    }
于 2017-07-07T18:33:43.823 回答
0

我认为您在使用 OCCI 时不会在“盒子里”找到类似的东西。

但是,使用 STL,您可以将每次迭代的结果推送到字符串流,并且当 rs->next() 为 NULL 时,您可以将字符串流附加到文件中。

于 2017-07-05T09:35:06.410 回答