我正在尝试使用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 *
,然后一次性将整行导出到文件中,而不指定每列的类型,但我还没有能够找到某些内容这样做。
我知道逐行导出对于大型集合并不是非常有效,但我希望在优化之前完成这项工作。
有没有人对如何有效地做到这一点有任何想法?
答案 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);
}