我尝试通过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控制台中附加数据库时,一切正常
答案 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);