sqlite3_exec() la fonction Callback de Précisions
Je vais avoir du mal à comprendre l'utilisation de la fonction de rappel dans une base de données SQLite3.
Je comprends bien, il est utilisé pour parcourir les instructions SELECT avec plusieurs enregistrements. Mais je ne comprends pas comment il le fait ou à faire mes propres utile de rappel. J'ai lu à travers TutorialsPoint plusieurs fois pour essayer de comprendre, mais ce n'est tout simplement pas le faire pour moi.
Lorsque j'utilise leur exemple et de débogage dans Visual Studio pour voir comment l'argument tableaux sont peuplées et traversée que je me suis perdu. Aussi VS ne montre que l'actuel emplacement dans la matrice, et non pas l'ensemble de la matrice elle-même.
Si vous avez besoin d'éclaircissements s'il vous plaît laissez-moi savoir que je suis ici pour apprendre!
Que je demande à quelqu'un d'expliquer la façon dont le rappel est utilisé. Peut-être que quelques exemples de la façon dont les autres l'ont utilisé. Juste une explication de ce que celui-ci fait de même:
static int callback(void *data, int argc, char **argv, char **azColName){
int i;
fprintf(stderr, "%s: ", (const char*)data);
for(i=0; i<argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
Pour le général de q/r sur le sujet, vous devriez probablement vous demander sur une des listes de diffusion (voir la section sqlite.org/support.html). Un Débordement de pile vous oblige à avoir beaucoup plus de question spécifique (généralement impliquant un code que vous avez écrit et ne peut pas faire de travail).
Je pense que si vous étiez à expliquer ce que vous entendez par "utile rappel", ça pourrait aider quelqu'un pour répondre. Que voulez-vous faire de votre fonction de rappel pour le faire? Qu'essayez-vous de réaliser?
Je vais voter pour fermer ce "trop large". Bien qu'aucune question n'a été posée, je suis en supposant que la question implicite est "Que faudrait-il faire pour me faire mieux comprendre ce sujet?" ou quelque chose de similaire.
Je ne comprends pas pourquoi les gens veulent souvent de fermer un post comme ceci 🙁 pour moi et Pour la personne qui a accepté de répondre et, à l'heure actuelle, au moins 36 upvoters l'implicite question semble évidente. L'on a accepté la réponse est probablement l'une des meilleures ressources sur Internet qui, j'en suis très reconnaissant. Avez-vous fermé la question, nous n'aurions pas cela!!!
OriginalL'auteur Slvrfn | 2015-06-30
Vous devez vous connecter pour publier un commentaire.
Supposons que vous avez une table très très simple appelé
User
qui ressemble à quelque chose comme ceci:Et que vous appelez
sqlite3_exec
comme ceci (les arguments sont décrites en détail dans la documentation):SQLite va exécuter l'instruction SQL et pour chaque ligne de résultat qu'il trouve il va appeler
my_special_callback
. Donc, avec notre exempleUser
table,my_special_callback
sera appelé 4 fois. Donc, nous allons créermy_special_callback
:Donné notre exemple, le tableau et les données, la sortie ressemble à ceci:
Maintenant à la façon de faire cela utile, c'est là que le 4ème argument de
sqlite3_exec
. À partir de la documentation:Donc, disons que nous voulons lancer notre SQL et de construire une liste des noms de tous nos utilisateurs. La première chose que nous devons faire est de changer la façon dont nous faisons appel
sqlite3_exec
:Et modifier
my_special_callback
utiliserMaintenant, si vous utilisez l'
callback
vous avez inclus dans votre question, vous serait-il appeler comme ceci:La sortie serait:
(À l'exception de la
User:
partie sera imprimée vers stderr vers stdout)J'espère que cela aide à clarifier les choses pour vous. Laissez-moi savoir si il ya toujours quelque chose que vous ne comprenez pas.
C'est le nombre de colonnes
mais si je l'appelle sqlite3_exec(db, "SELECT * from Utilisateur", "callback", "Utilisateur", NULL); et aller dans le débogage, le rappel compter argument serait de 4. Isnt que 4, donc 4 lignes?
Je pense que dans la première fonction de callback exemple. Il convient de Il y a 2 colonne(s) au lieu de Il y a 4 colonne(s)
ces déclarations ne pas générer un résultat d'ensemble, ce qui fait du sens.
OriginalL'auteur Sean Bright
De ce tutoriel est horrible, parce qu'il n'a pas utiliser quoi que ce soit mais
sqlite3_exec()
.Dans le cas général, la seulement moyen utile d'utiliser
sqlite3_exec()
est à remplacer par sqlite3_prepare_v2()/sqlite3_step()/sqlite3_column_*()/sqlite3_finalize() appels afin que vous puissiez lire les données dans le même endroit où vous avez réellement besoin de le manipuler:Une belle solution. Merci cl
OriginalL'auteur CL.