Jakub Arnold
Jakub Arnold

Reputation: 87210

Temporary in-memory database in SQLite

Is it possible somehow to create in-memory database in SQLite and then destroy it just by some query?

I need to do this for unit testing my db layer. So far I've only worked by creating normal SQLite db file and delete if after all tests, but doing it all in memory would be much better.

So is it possible to instanciate database only in memory without writing anything to disc? I can't use just transactions, because I want to create whole new database.

Upvotes: 22

Views: 17066

Answers (4)

Farshid Ahmadi
Farshid Ahmadi

Reputation: 513

I suggest you using lmDisk toolkit.

It's a tool kit to mount a part of ram or image file as normal disk. you can copy your project (or just your db) there.

I've try it to process raw data and create a db for a game ai.

Upvotes: 1

Schwern
Schwern

Reputation: 164679

As an alternative to in memory databases, you can create a SQLite temporary database by using an empty string for the filename. It will be deleted when the connection is closed. The advantage over an in-memory database is your databases are not limited to available memory.

Alternatively, you can create your database in a temp file and let the operating system clean it up. This has the advantage of being accessible for inspection.

Upvotes: 2

MikeyB
MikeyB

Reputation: 3350

I'd suggest mounting a tmpfs filesystem somewhere (RAM only filesystem) and using that for your unit tests.

Instantiate DB files as normal then blow them away using rm - yet nothing has gone to disk.

(EDIT: Nice - somebody beat me to a correct answer ;) Leaving this here as another option regardless)

Upvotes: 1

Chad Birch
Chad Birch

Reputation: 74528

Create it with the filename ":memory:": In-Memory Databases.

It'll cease to exist as soon as the connection to it is closed.

Upvotes: 33

Related Questions