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.sqlite.org/inmemorydb.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。