分享

使用sqlite创建内存数据

 禁忌石 2018-04-05
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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多