2017-06-30 2 views
1

Je tente de construire un programme C++ en utilisant des bibliothèques occi qui prendront une instruction select ou un nom de table en entrée et le transformeront en un fichier délimité. Cependant, en regardant la documentation, je ne trouve pas un moyen d'exporter toutes les colonnes d'un résultat de requête dans un fichier. Presque tous les exemples que j'ai trouvés le long des lignes suivantesExportation dynamique d'une table oracle dans un fichier plat

string query = "SELECT col1 FROM table1"; 

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

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

Ce que je veux faire: Faites un select * puis exporter la ligne complète du fichier en une seule fois, sans préciser le type de chaque colonne, mais je havre de paix J'ai été capable de trouver quelque chose qui fait ça.

Je sais que les exportations ligne par ligne ne sont pas vraiment efficaces pour les grands ensembles, mais je veux que cela fonctionne avant de l'optimiser.

Est-ce que quelqu'un a des idées sur la façon de le faire efficacement?

Répondre

0

J'ai trouvé qu'il n'y a aucun moyen de faire cela sans itération sur l'objet de métadonnées au moins une fois. Comme je n'ai besoin de le faire qu'une fois par l'exécution de la requête, j'ai fini par écrire les types d'attributs et les positions de colonnes dans une carte et utiliser cette carte dans la boucle de jeu de résultats pour lire les données. Voici le code que j'ai utilisé:

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); 
    } 
0

Je ne pense pas que vous trouverez quelque chose comme ceci "dans la boîte" en utilisant OCCI. Cependant, en utilisant STL vous pouvez envoyer à un train de chaînes le résultat de chaque itération et lorsque le rs-> next() est NULL, vous pouvez ajouter le train de chaînes dans le fichier.