sqlite3_exec () Callback-Funktion Erläuterung

7

Ich habe Probleme, die Verwendung der Rückruffunktion in einer SQLite3-Datenbank zu verstehen.

Ich verstehe, dass es verwendet wird, um SELECT-Anweisungen mit mehreren Datensätzen zu durchlaufen. Aber ich verstehe nicht, wie es das macht oder wie ich meinen eigenen nützlichen Callback mache. Ich habe TutorialsPoint mehrmals durchgelesen, um zu versuchen, das zu verstehen, aber das tut es einfach nicht für mich.

Wenn ich ihr Beispiel verwende und in Visual Studio debugge, um zu sehen, wie die Argument-Arrays gefüllt und durchlaufen werden, gehe ich verloren. Außerdem zeigt VS nur den aktuellen Slot im Array an, nicht das gesamte Array selbst.

Wenn Sie irgendeine Erklärung benötigen, lassen Sie es mich wissen, während ich hier bin, um zu lernen!

Ich frage nach jemandem, der erklärt, wie der Rückruf verwendet wird. Vielleicht einige Beispiele dafür, wie andere es benutzt haben. Nur eine Erklärung dessen, was dieser gerade macht:

%Vor%     
Slvrfn 30.06.2015, 19:23
quelle

2 Antworten

23

Nehmen wir an, Sie haben eine sehr einfache Tabelle namens User , die ungefähr so ​​aussieht:

%Vor%

Und Sie rufen sqlite3_exec so auf (die Argumente werden im Detail in der Dokumentation beschrieben):

%Vor%

SQLite führt die übergebene SQL-Anweisung aus und für jede gefundene Ergebniszeile wird my_special_callback aufgerufen. In unserem Beispiel User table wird my_special_callback 4 Mal aufgerufen. Lassen Sie uns also my_special_callback :

erstellen %Vor%

Angesichts unserer Beispieltabelle und Daten sieht die Ausgabe folgendermaßen aus:

%Vor%

Nun, um das nützlich zu machen, kommt hier das vierte Argument von sqlite3_exec . Aus der Dokumentation:

  

Das vierte Argument von sqlite3_exec () wird an den ersten übergeben   Argument jedes Rückrufaufrufs.

Nehmen wir an, wir möchten unser SQL ausführen und eine verkettete Liste der Namen aller unserer Benutzer erstellen. Als erstes müssen wir ändern, wie wir sqlite3_exec aufrufen:

%Vor%

Und modifiziere my_special_callback , um es zu benutzen

%Vor%

Wenn Sie nun das callback verwenden würden, das Sie in Ihre Frage aufgenommen haben, würden Sie es so nennen:

%Vor%

Die Ausgabe wäre:

%Vor%

(Außer dass User: part in stderr anstelle von stdout gedruckt wird)

Hoffentlich hilft dies, die Dinge für Sie zu klären. Lass mich wissen, ob es noch etwas gibt, das du nicht verstehst.

    
Sean Bright 01.07.2015, 12:27
quelle
16

Dieses Tutorial ist schrecklich, weil es nichts außer sqlite3_exec() verwendet.

Im allgemeinen Fall ist die einzige nützliche Art, sqlite3_exec() zu verwenden, sie durch sqlite3_prepare_v2 () / sqlite3_step () / sqlite3_column _ * () / sqlite3_finalize () Aufrufe damit Sie die Daten an der gleichen Stelle lesen können, an der Sie sie tatsächlich behandeln müssen:

%Vor%     
CL. 01.07.2015 18:30
quelle

Tags und Links