我想知道使用 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}
}
}
我喜欢同时运行我的应用程序的几个实例,如果它们都共享相同的数据库文件,那是不安全的。每个实例在运行时都应该在内存中拥有自己的数据库副本