Sqlite c++ ATTACH内存数据库

Sqlite c++ ATTACH memory database

本文关键字:数据库 内存 ATTACH c++ Sqlite      更新时间:2023-10-16

我尝试通过c++ api将内存中的db连接到现有的db连接:

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 sien";}
    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个错误消息"

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

任何想法?当我尝试在sqlite控制台附加db时,一切都很好

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

首先:在sqlite3.c中设置SQLITE_USE_URI标志为1而不是0(仅仅使用SQLITE_OPEN_URI标志与sqlite3_open_v2()是不够的)

#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);