Sqlite打开内存数据库或文件数据库

时间:2013-05-15 22:42:47

标签: c++ sqlite

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

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

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

  3. 如果sqlite_open函数使用“:memory:”打开内存数据库,请附加文件基础数据库。在程序运行期间,整个数据库将是一个内存基础数据库吗?

  4. 我在官方的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}
    }
    } 
    

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

0 个答案:

没有答案