Sqlite c ++ ATTACH内存数据库

时间:2015-08-17 13:43:04

标签: c++ sqlite in-memory-database

我尝试通过c ++ api将内存数据库附加到现有数据库连接,如下所示:

void InMemoryDbtest(){
    sqlite3 *db;
    int rc = sqlite3_open("E:/VS_workspace/ConsoleSQLITE/Debug/TPCH.sqlite", &db);
    if (rc){
        cout << "nie moge otworzyc bazy danych ";}
    else{
        cout << "otwarcie bazy ---- udalo sie\n";}
    char *err;

sqlite3_exec(db, "ATTACH DATABASE 'file::memory:?cache=shared' as pom",0,0,&err);

    cout << "error" << err << endl;
    string q = "create table pom.bla as select n_name from NATION ";
    sqlite3_exec(db, q.c_str(), 0, 0, &err);
    cout << "error" << err << endl;
}

我收到2条错误消息&#34;

无法打开数据库:文件:内存 和 未知的数据库pom

有什么想法吗?当我尝试在sqlite控制台中附加数据库时,一切正常

1 个答案:

答案 0 :(得分:0)

感谢您的建议,解决方案是:

首先:将sqlite3.c中的SQLITE_USE_URI标志设置为1而不是0(仅使用带有sqlite3_open_v2()的SQLITE_OPEN_URI标志就足够了)

#ifndef SQLITE_USE_URI
# define  SQLITE_USE_URI 1
#endif

然后你就可以在所有的sqlite3函数中使用uri了。

适用于Windows的uri是:

int rc2 = sqlite3_open("file:///E:/VS_workspace/ConsoleSQLITE/Debug/TPCH.sqlite", &db);