将oracle表动态导出到平面文件

时间:2017-06-30 16:57:18

标签: c++ occi

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

string query = "SELECT col1 FROM table1";

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

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

我想要做的是:执行select *,然后一次性将整行导出到文件中,而不指定每列的类型,但我还没有能够找到某些内容这样做。

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

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

2 个答案:

答案 0 :(得分:0)

我不认为你会在框中找到类似的东西&#34;&#34;使用OCCI时。

然而,使用STL,您可以将每次迭代的结果推送到字符串流,当rs-&gt; next()为NULL时,您可以将字符串流附加到文件中。

答案 1 :(得分: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);
    }