Comment créer une base de données sqllite3 en mémoire?

L'une des utilisations appropriées pour sqlite3 est"bases de données en mémoire". Cela ressemble à un outil vraiment utile pour mes applications C++. Est-ce que quelqu'un a un exemple de comment cela se fait en C ou C++? Je suis à la recherche d'un moyen canonique de glisser plusieurs fichiers plats dans une base de données en mémoire, puis de faire quelques jointures.

11
demandé sur Ian Ringrose 2008-11-20 08:16:51

3 réponses

c'est en fait assez facile. Il suffit de spécifier ':memory:' comme nom de fichier de la base de données lors de l'ouverture d'une base de données à l'aide de l'API C/C++. C'est une constante que le moteur reconnaître. La même chose fonctionne pour D'autres langages tels que Python ou Ruby, puisqu'ils enveloppent simplement l'API C/C++. Voir http://sqlite.org/c3ref/open.html pour plus de détails.

16
répondu Kamil Kisiel 2008-11-20 05:21:49

il suffit d'ouvrir le fichier :mémoire: et qui devrait le faire (à moins qu'il n'en PHP).

vous mentionnez que vous voulez lire dans plusieurs fichiers plats et ne se joint sur eux. S'il est possible de stocker les fichiers plats dans des bases de données SQLite, vous pouvez travailler directement avec les deux en vous attachant l'un à l'autre:

ATTACH foo.db AS foo

se référer ensuite aux tableaux en foo comme suit:

SELECT * FROM foo.users

de cette façon vous pouvez faire vos jointures sans avoir besoin de la création d'une base de données en mémoire.

5
répondu Kyle Cronin 2008-11-20 05:32:06

si vous voulez que SQLite n'utilise pas les fichiers temporaires comme journaux, E. g, vous ne voulez aucune activité de fichier autre que lorsque vous demandez manuellement une connexion, déconnexion, attache ou détacher. Ensuite, utilisez les deux pragmas suivants à l'exécution après vous être connecté à votre base de données ":memory:".

PRAGMA temp_store=MEMORY;
PRAGMA journal_mode=MEMORY;

De la docs.

5
répondu Danielb 2008-12-02 04:31:29