0

我想知道使用 sqlite API 中的 sqlite3_open 函数打开 sqlite 数据库文件时如何读取数据。我一直在想以下几点:

  1. sqlite3_open 函数每次都直接从数据库文件中读取数据。

  2. sqlite3_open 函数将文件基础数据库复制到内存如果系统资金足够,锁定数据库文件直到更新并关闭数据库连接。如果用户从表中选择一些数据,那么这些数据应该来自内存,而不是来自数据库文件

  3. 如果 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}
}
} 

我喜欢同时运行我的应用程序的几个实例,如果它们都共享相同的数据库文件,那是不安全的。每个实例在运行时都应该在内存中拥有自己的数据库副本

4

0 回答 0