sqlite支持创建数据库,如果建立多个链接链接该库需要执行ATTACH命令 //创建内存数据库 sqlite3 *db; sqlite3 *tmp; rc = sqlite3_open("new1.db", &db); if( rc ){ fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); return(0); }else{ fprintf(stderr, "Opened database successfully\n"); /*执行attach*/ rc = sqlite3_open("new2.db", &tmp); rc = sqlite3_exec(tmp,"attach 'new.db' as newdb",0,0,&zErrMsg); if( rc != SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); } 两个数据库连接db和tmp,通过attach命令连接到new1.db,但是两个连接有不同之处。new.db存在表select,使用db查询时执行如下sql select * from test tmp连接通过带有模式的查询sql select * from newdb.test 这样两个连接都可以操作new1.db了。 创建内存数据库需要数据文件名改成“:memory:”,注意前后都有要分号,要不不是内存数据, //创建内存数据库 rc = sqlite3_open(":memory:", &db); if( rc ){ fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); return(0); }else{ fprintf(stderr, "Opened database successfully\n"); } 但是通过attach命令无法实现两个链接共享一个内存数据库,实验证明attach后会新创建一个内存数据库,解决的办法有两个: 1、将一部分内存虚拟一个磁盘,SQLite的数据库就放到这个虚拟磁盘中。 2、升级到最新版本的sqlite,支持多个链接共享内存数据库,详细做法参考: https://www./inmemorydb.html
|
|