Pergunta

Uma das usos apropriados para sqlite3 é "bancos de dados in-memory". Isso soa como uma ferramenta muito útil para aplicações minha C ++. Alguém tem um exemplo de como isso é feito em C ou C ++? Estou procurando especificamente uma forma canônica para ingerir várias-arquivos simples em um in-memory banco de dados, em seguida, fazer alguma junta.

Foi útil?

Solução

É realmente muito fácil. Basta especificar ': memory:' como o nome do arquivo de banco de dados ao abrir um banco de dados usando a API C / C ++. É uma constante especial que o motor vai reconhecer. O mesmo realmente funciona para outras linguagens como Python ou Ruby, uma vez que normalmente só embrulhar o / C API C ++. Consulte http://sqlite.org/c3ref/open.html para detalhes completos.

Outras dicas

Basta abrir o arquivo: Memória:. E que deve fazê-lo (pelo menos ele faz em PHP)

Você menciona que você quer ler em vários arquivos simples e fazer junta-se sobre eles. Se é possível armazenar os arquivos simples como bancos de dados SQLite, você pode trabalhar diretamente com ambos, anexando um para o outro:

ATTACH foo.db AS foo

Em seguida, consulte as tabelas em foo assim:

SELECT * FROM foo.users

Desta forma, você pode fazer a sua junta-se sem a necessidade de criação de um banco de dados in-memory.

Se você quiser SQLite para não usar arquivos temporários como revistas, p.ex., você não quer qualquer atividade de arquivo diferente do que quando você solicita manualmente uma conexão, desconexão, anexar ou desanexar. Em seguida, use os dois pragmas seguintes em tempo de execução depois que você se conectar ao seu ": memória:". Base de dados

PRAGMA temp_store=MEMORY;
PRAGMA journal_mode=MEMORY;

A partir da docs.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top