我想知道在使用sqlite API中的sqlite3_open函数打开sqlite数据库文件时如何读取数据。我一直在想以下几点:
sqlite3_open函数每次都直接从数据库文件中读取数据。
如果系统资金足够,sqlite3_open函数会将文件基础数据库复制到内存中,锁定数据库文件,直到更新和关闭数据库连接。如果用户从表中选择一些数据,那么这些数据应该来自内存,而不是来自数据库文件
如果sqlite_open函数使用“:memory:”打开内存数据库,请附加文件基础数据库。在程序运行期间,整个数据库将是一个内存基础数据库吗?
我在官方的sqlite论坛上看到了一个讨论 http://www.sqlite.org/cvstrac/wiki?p=InMemoryDatabase
和http://sqlite.1065341.n5.nabble.com/Memory-Resident-Database-td42098.html
我是否必须将我的数据库复制到内存,如下所示为我的c ++应用程序获取内存数据库?
proc loadDB {dbhandle filename} {
if {$filename != ""} {
#attach persistent DB to target DB
$dbhandle eval "ATTACH DATABASE '$filename' AS loadfrom"
#copy each table to the target DB
foreach {tablename} [$dbhandle eval "SELECT name FROM loadfrom.sqlite_master WHERE type = 'table'"] {
$dbhandle eval "CREATE TABLE '$tablename' AS SELECT * FROM loadfrom.'$tablename'"
}
#create indizes in loaded table
foreach {sql_exp} [$dbhandle eval "SELECT sql FROM loadfrom.sqlite_master WHERE type = 'index'"] {
$dbhandle eval $sql_exp
}
#detach the source DB
$dbhandle eval {DETACH loadfrom}
}
}
我喜欢同时运行我的应用程序的几个实例,如果它们共享相同的数据库文件,则不安全。每个实例在运行时都应在内存中拥有自己的数据库副本