10
votes

Utilisation de sqlite3_exec

J'ai les prochaines commandes SQLite3 qui génère un fichier avec plus de 60 millions d'enregistrements: xxx pré>

Comment puis-je inclure ces commandes dans un programme C en utilisant: P>

 sqlite3_exec(db, "..........", NULL, 0, &db_err); 


1 commentaires

Définir un rappel pour le formater et l'imprimer comme on ne veut que vous n'êtes pas une option?


4 Réponses :


3
votes

Je pense que vous voulez vraiment Utilisez une fonction de rappel et peut-être FPRRTINF () à écrire votre sortie formatée dans un fichier. Heureusement, le prototype du pointeur de rappel contient un vide supplémentaire (facultatif) * qui pourrait servir de flux de fichier *, rendant le rappel plus récupéable à l'avenir.

afaik, sqlite3_exec () n'offre pas la même interface que la CLI SQLITE3. Son juste pour les requêtes, pas les modificateurs de sortie.

Vérifiez l'exemple du code au bas du lien que j'ai donné, c'est très facile à utiliser une fonction de rappel.


0 commentaires

9
votes

Si vous voulez le faire au sein de C (par opposition à la tuyauterie de quelque chose sur le programme de ligne de commande de SQLite3 qui contient ces commandes de points nifty), vous devrez utiliser un rappel.

Pour votre découpage et votre passage de commodité, voici ici Le code, piraté de la bibliothèque apophénie pour l'informatique statistique. P>

Partie I: P>

int The_Callback(void *a_param, int argc, char **argv, char **column){
    for (int i=0; i< argc; i++)
        printf("%s,\t", argv[i]);
    printf("\n");
    return 0;
}


1 commentaires

Si vous obtenez une erreur, vous devez l'imprimer, puis libérer avec sqlite3_free (err);



4
votes

Le site Web de compagnie du livre Utilisation de SQLite a quelques exemples. En particulier, le chapitre 7 présente quelques exemples de l'API C / C ++.

Exemple de code: http://examples.oreilly.com/9780596521196/


1 commentaires

Le lien du livre s'est déplacé. Voici une recherche qui montre deux livres d'O'Reilly sur SQLite Search.Orilly. com /? q = sqlite & x = -759 & y = -56 Il semble que l'exemple du code est toujours à la liaison ci-dessus.



2
votes

Je fais des expériences avec SQLite avec un simple harnais de test à l'aide d'une seule table contenant une clé de chaîne de caractères et une valeur entière unique. Les suivants sont des morceaux de source du harnais de test expérimental que j'utilise. J'ai tiré ces pièces afin de montrer la création de la table avec la fonction que j'utilise pour créer un jeu d'enregistrements à partir d'une instruction SELECT SQL à l'aide de la fonctionnalité de rappel de SQLite. Il existe des printf () instructions et fprintf () des instructions dans divers endroits afin que je puisse voir les résultats des actions car il s'agit d'une simple application de type console pour le faisceau de test.

Notez que des moments où vous n'avez pas besoin de l'argument de rappel de rappel, SQLITE vous permet de spécifier un pointeur NULL indiquant de ne pas vous soucier du rappel.

et lorsque vous lisez la source juste Rappelez-vous que c'est un hack expérimental!

la fonction pour créer la table ressemble à: xxx

i insérez des enregistrements dans cette table, puis avez une fonction que j'appelle pour obtenir un ou Plus d'enregistrements de la table à l'aide d'une instruction SELECT SQL. La fonction Select récupère les enregistrements et utilise un appel pour convertir chaque enregistrement renvoyé dans une structure C. La structure C ressemble à: xxx

Le rappel utilisé pour le jeu d'enregistrements utilise une struct contenant des données de gestion d'enregistrement Sélectionner. Par ce que je veux dire, c'est que le rappel prend son premier argument un pointeur sur une structure qui met à son tour sur l'emplacement pour mettre les données transformées avec des informations sur la taille de la zone de mémoire. Étant donné qu'un SELECT pourrait renvoyer plusieurs enregistrements en fonction de la clause WHERE, la fonction de rappel utilise la structure de rappel de rappel pour savoir combien d'enregistrements transformés il peut mettre dans la zone de mémoire ainsi qu'un indice afin que, comme il s'agisse d'enregistrements, Il peut indiquer dans la zone de mémoire afin de renvoyer plusieurs enregistrements transformés.

La structure de gestion des rappels Retour ressemble à ceci: xxx

La fonction Select fonction Comme: xxx

le rappel qui traite chaque enregistrement renvoyé par la sélection ressemble à ceci: xxx


3 commentaires

Est-ce une réponse à la question? Il semble légèrement complexe à titre d'exemple et ne produit pas en tant que CSV (car l'astucieux semble vouloir)


@Hasturkun, j'ai trouvé cela à travers une recherche Google tout en enquêtant sur la manière d'utiliser SQLite. Je mets cet exemple de mes propres enquêtes ici car la question portait sur l'utilisation de SQLITE3_EXEC () afin que d'autres puissent le trouver utiles. Parfois, une réponse plus générale aide les personnes qui rencontrent la question à travers Google Search, mais les réponses sont trop spécifiques pour aider. J'ai décidé de fournir des détails supplémentaires sur l'utilisation d'un rappel.


@Richardchambers merci! C'est ce que je cherchais.