(Résolu) Débutant avec SQLite

Bonjour,

je débute actuellement avec la librairie SQLite en C, et je cherche une méthode propre pour récupérer les résultats de mes requêtes.
Les exemples pour le C ne sont pas très abondants sur Internet, et je n’ai pas trouvé ce que je cherche.

Pour récupérer les données, il y a la méthode avec les callbacks, très simple, d’ailleurs il y a un petit exemple basique au bas de cette page.
La fonction callback est appelée récursivement par la fonction sqlite3_exec(…) pour chaque ligne répondant à la requête. Dans l’exemple on affiche immédiatement le résultat avec un printf à l’intérieur même de la fonction callback.

Cependant cette méthode ne me convient pas vraiement, parce que je récupère des données dans des tables pour les afficher dans une interface GTK. Si j’emploie cette méthode, ce serai la fonction callback qui remplirai l’interface directement, et ce n’est pas propre. Je veux séparer interface et gestion de la base de données.

Le mieux serait donc que j’arrive à faire une fonction qui exécute les requêtes, et qui renvoie les résultats à la fonction appelante. Prototype du genre:
void sql_request(int *argc, char **argv).
Là je pourrais appeler la fonction sql_request(…) depuis une fonction de mon interface GTK, et elle me retournerai les résultats sous forme de “chaines” que je pourrais afficher ensuite.

Donc je ne sais pas comment faire. Quelqu’un a t-il une solution à me proposer?

Je vous remercie, bye.

Pourquoi ne pas (tout simplement) remplir une liste chainée de lignes de table pour pouvoir ensuite afficher ?
Cela dit, c’est “marrant” que ça se fasse comme ça, je veux dire ça change beaucoup de la lib mysql.
Quoi ça n’a rien à voir B)

A mon avis il y a un autre moyen de faire ça que celui décrit dans l’exemple, je suis en train d’examiner le code source d’Amarok, qui utilise SQLite pour mémoriser les informations concernant les collections musicales (en C++), et il me semble qu’ils font autrement, je ne sais pas encore si leur méthode est applicable en C.

Si je fais une liste chainée, je vais devoir la déclarer en global pour pouvoir y accéder depuis les fonctions d’interface, mais c’est une solution.

Je crois que cet exemple devrait m’aider:
http://www.lazarusid.com/sqlite3/