小. 快速. 可靠.
选择任意三个.

SQLite库的Tcl接口

SQLite库的设计使其非常易于从Tcl或Tcl / Tk脚本使用. SQLite最初是Tcl扩展 ,而SQLite的主要测试套件是用TCL编写的. SQLite可以与任何编程语言一起使用,但是它与TCL的连接很深.

本文档概述了SQLite的Tcl编程接口.

API

SQLite库的接口由一个名为sqlite3的 tcl命令组成.由于只有一个命令,因此该接口不会放置在单独的命名空间中.

sqlite3命令的用法如下:

sqlite3

sqlite3命令打开第二个参数中命名的数据库. 如果该数据库尚不存在,则默认行为是自动创建该数据库(尽管可以使用" -create false "选项来更改它). sqlite3命令始终创建一个新的Tcl命令来控制数据库. 新的Tcl命令的名称由第一个参数给出. 这种方法类似于在Tk中创建小部件的方式.

数据库的名称通常只是存储数据库的磁盘文件的名称. 如果数据库名称是特殊名称" :memory: ",则会在内存中创建一个新数据库. 如果数据库的名称是一个空字符串,那么将在一个空文件中创建数据库,该文件将在数据库连接关闭时自动删除. 如果sqlite3命令提供了" -uri yes "选项,则可以使用URI文件名 .

sqlite3命令可理解的选项包括:

-创建

如果为true,则如果尚不存在则创建一个新数据库. 如果为false,则尝试打开以前不存在的数据库文件会引发错误. 默认行为是" true".

-nomutex

如果为true,则将禁用数据库连接的所有互斥锁. 这在单线程应用程序中提供了小的性能提升.

-readonly

如果为true,则以只读方式打开数据库文件. 如果为false,则在文件系统权限允许的情况下打开数据库进行读取和写入操作,或者仅在操作系统拒绝文件系统写入权限的情况下才打开数据库. 默认设置为" false". 请注意,如果先前具有数据库的进程没有完全退出并且没有留下热日志 ,则在打开数据库后必须具有写许可权才能恢复该数据库,并且该数据库不能以只读方式打开.

-uri

如果为true,则将filename参数解释为URI filename . 如果为false,则参数为文字文件名. 默认值为" false".

-vfs

使用由参数命名的备用VFS .

. 一旦打开SQLite数据库,就可以使用方法对其进行控制. 当前定义了40种方法.

这些方法中的每一种的使用将在后续内容中进行说明,尽管没有按照上面显示的顺序进行.

"评估"方法

method is "eval". 最有用的方法是" eval". eval方法用于在数据库上执行SQL. eval方法的语法如下所示:

eval ? 评估 ? ? ? ? ? ? ? ? ? ?

eval方法的工作是执行第二个参数中给出的一个或多个SQL语句. 例如,要在数据库中创建新表,可以执行以下操作:

sqlite3 db1 ./testdb
db1 eval {创建表t1(a int,b文本)}

上面的代码用a和b列创建了一个名为t1的新表. 还有什么更简单的?

查询结果作为列值列表返回. 如果查询请求2列并且有3行与查询匹配,则返回的列表将包含6个元素. 例如:

db1 eval {插入t1值(1,'hello')}
db1 eval {插入t1值(2,'再见')}
db1 eval {插入t1值(3,'howdy!')}
设置x [db1 eval {SELECT * FROM t1 ORDER BY a}]

上面的代码将变量$ x设置为

1你好2再见3你好!

您还可以通过在SQL代码之后指定数组变量的名称和脚本来一次处理一行查询的结果. 对于查询结果的每一行,所有列的值都将插入到数组变量中,并将执行脚本. 例如:

db1 eval {SELECT * FROM t1 ORDER BY a}值{

放入""
}

最后的代码将给出以下输出:

值(*)= ab
值(a)= 1
值(b)=你好

值(*)= ab
值(a)= 2
价值观(b)=再见

值(*)= ab
值(a)= 3
值(b)=你好!

对于结果行中的每一列,该列的名称均用作数组的索引,并且该列的值存储在相应的数组条目中. (警告:如果查询结果集中的两个或更多列具有相同的名称,则具有该名称的最后一列将覆盖先前的值,并且具有相同名称的较早的列将不可访问.)使用特殊的数组索引*按列名的出现顺序存储它们.

通常情况下,NULL SQL结果存储使用在阵列中NullValue属性设置. 但是,如果使用-withoutnulls选项,则NULL SQL值将导致未设置相应的数组元素.

如果省略了数组变量名或为空字符串,则每个列的值将存储在一个变量中,该变量的名称与列本身相同. 例如:

db1 eval {选择*来自t1的a} {
放入" a = $ ab = $ b"
}

由此我们得到以下输出

a = 1 b =你好
a = 2 b =再见
a = 3 b =你好!

Tcl变量名称可以出现在第二个参数的SQL语句中任何合法的放置字符串或数字文字的位置. 变量的值代替变量名. 如果变量不存在,则使用NULL值. 例如:

db1 eval {插入t1值(5,$ bigstring)}

请注意,不必引用$ bigstring值. 那是自动发生的. 如果$ bigstring是大字符串或二进制对象,则此技术不仅易于编写,而且效率更高,因为它避免了复制$ bigstring的内容.

如果$ bigstring变量同时具有字符串和" bytearray"表示形式,则TCL将值插入为字符串. 如果它仅具有" bytearray"表示形式,则该值将作为BLOB插入. 若要强制将值插入为BLOB,即使它也具有文本表示形式,请使用" @"字符代替" $". 像这样:

db1 eval {插入t1值(5,@ bigstring)}

如果变量不具有字节数组表示形式,则" @"的作用与" $"相同. 请注意,":"在所有情况下都像" $"一样工作,因此以下是表达相同语句的另一种方式:

db1 eval {插入t1值(5,:bigstring)}

如果SQL文本用双引号" ..."而不是大括号{...}括起来,则在变量名称前使用":"而不是" $"有时会很有用. 当SQL包含在双引号" ..."中时,TCL将替换$变量,如果不格外小心,则可能导致SQL注入. 但是,无论是否使用双引号" ..."或大括号{...}来封装SQL,TCL都不会替代:-variable,因此,:-variables的使用增加了一种防御措施SQL注入.

"关闭"方法

顾名思义,SQLite数据库的"关闭"方法只是关闭数据库. Tcl command. 这具有删除 Tcl命令的 . 这是打开然后立即关闭数据库的示例:

sqlite3 db1 ./testdb
db1关闭

directly, that has the same effect as invoking the "close" method. 如果直接删除 ,则与调用"关闭"方法具有相同的效果. 因此,以下代码与前面的代码等效:

sqlite3 db1 ./testdb
重命名db1 {}

"交易"方法

"事务"方法用于在SQLite数据库事务中执行TCL脚本. 脚本完成时将提交事务,如果脚本失败,则将回滚事务. 如果该事务发生在另一事务中(甚至是使用BEGIN手动启动的事务),则该事务不可操作.

transaction命令可用于以安全的方式将多个SQLite命令组合在一起. 当然,您始终可以使用BEGIN手动启动事务. 但是,如果发生错误以致永远不会运行COMMIT或ROLLBACK,则数据库将无限期保持锁定. 此外,BEGIN不会嵌套,因此您必须确保在启动新事务之前没有其他事务处于活动状态. "事务"方法自动处理所有这些细节.

语法如下所示:

transaction 事务

can be one of deferred , exclusive or immediate . 可以是defered , Exclusive或Instant之一 . 默认为推迟.

"缓存"方法

上面描述的" eval"方法为最近评估的SQL命令保留了准备好的语句的缓存. "缓存"方法用于控制此缓存. 该命令的第一种形式是:

cache size 缓存大小

这设置了可以缓存的最大语句数. 上限为100.默认值为10.如果将缓存大小设置为0,则不进行缓存.

命令的第二种形式是:

cache flush 缓存刷新

cache-flush方法最终确定当前在缓存中的所有准备好的语句.

"完成"方法

" complete"方法将假定的SQL字符串作为唯一参数. 如果字符串是SQL的完整语句,则返回TRUE,如果要输入更多内容,则返回FALSE.

在构建交互式应用程序时,"完成"方法很有用,以便了解用户何时输入了一行SQL代码. 这实际上只是sqlite3_complete() C函数的接口.

"配置"方法

" config"方法使用sqlite3_db_config()接口查询或更改数据库连接的某些配置设置. 不带任何参数运行此方法以获取可用配置设置及其当前值的TCL列表:

config 配置

上面将返回如下内容:

防御0 dqs_ddl 1 dqs_dml 1 enable_fkey 0 enable_qpsg 0 enable_trigger 1 enable_view 1 fts3_tokenizer 1 legacy_alter_table 0 legacy_file_format 0 load_extension 0 no_ckpt_on_close 0 reset_database 0 trigger_eqp 0 trust_schema 1 writable_schema 1可写

添加单个配置设置的名称以查询该设置的当前值. (可选)添加布尔值以更改设置.

为了最大程度地提高应用程序的安全性,建议进行以下四个配置更改. 关闭trust_schema设置可防止在触发器,视图,CHECK约束,生成的列和表达式索引内使用虚拟表和狡猾的SQL函数. 关闭dqs_dml和dqs_ddl设置可防止使用双引号字符串. 启用防御功能可防止直接写入影子表.

  数据库配置trusted_schema 0
 数据库配置防御1
 数据库配置dqs_dml 0
 数据库配置dqs_ddl 0

"复制"方法

"复制"方法将数据从文件复制到表中. 它返回从文件成功处理的行数. 复制方法的语法如下所示:

copy ? 复制 ? ? ? ? ?

, , , , or . 冲突算法必须是INSERT语句的SQLite冲突算法之一: , , , 或 . 有关更多信息,请参见SQLite语言部分中的ON CONFLICT . 冲突算法必须以小写字母指定.

表名必须已经作为表存在. 文件名必须存在,并且每一行必须包含表中定义的相同列数. 如果文件中的行包含多于或少于定义的列数,则复制方法将回滚所有插入,并返回错误.

列分隔符是可选的列分隔符字符串. 默认值为ASCII制表符\ t.

Null-indicator是一个可选的字符串,它指示列的值为空. 默认值为空字符串. 注意,column-separator和null-indicator是可选的位置参数. 如果指定了null-indicator,则必须指定一个column-separator参数,并在null-indicator参数之前.

copy方法实现与.import SQLite shell命令类似的功能.

"超时"方法

"超时"方法用于控制SQLite库在放弃数据库事务之前等待锁清除的时间. 默认超时为0毫秒. (换句话说,默认行为是根本不等待.)

SQLite数据库允许同时使用多个读取器或单个写入器,但不能同时使用两者. 如果有任何进程正在写入数据库,则不允许其他进程读取或写入. 如果有任何进程正在读取数据库,则允许其他进程读取但不允许写入. 整个数据库共享一个锁.

当SQLite尝试打开数据库并发现它已被锁定时,可以选择将其延迟一小段时间,然后尝试再次打开该文件. 重复此过程,直到查询超时并且SQLite返回失败为止. 超时时间是可调的. 默认情况下将其设置为0,这样,如果数据库被锁定,则SQL语句立即失败. 但是您可以使用"超时"方法将超时值更改为正数. 例如:

db1超时2000

超时方法的参数是等待清除锁的最大毫秒数. 因此,在上面的示例中,最大延迟为2秒.

"忙"法

"忙"方法(如"超时")仅在数据库锁定时起作用. 但是"忙碌"方法使程序员可以更好地控制要采取的操作. " busy"方法指定一个回调Tcl过程,每当SQLite尝试打开一个锁定的数据库时,该过程就会被调用. 在调用之前,会将单个整数参数附加到回调中. 该参数是当前锁定事件之前对忙碌回调的先前调用次数. 预期回调将在短时间内执行一些其他有用的工作(例如服务GUI事件),然后返回,以便可以再次尝试进行锁定. 如果回调过程希望SQLite再次尝试打开数据库,则应返回" 0",如果希望SQLite放弃当前操作,则应返回" 1".

如果在不带参数的情况下调用busy方法,则返回由busy方法最后设置的回调过程的名称. 如果未设置回调过程,则返回一个空字符串.

" enable_load_extension"方法

默认情况下,SQLite的扩展加载机制(使用load_extension() SQL函数访问)是关闭的. 这是安全预防措施. 如果应用程序要使用load_extension()函数,则必须首先使用此方法打开该功能.

此方法采用单个布尔参数,它将打开或关闭扩展加载功能.

为了获得最佳安全性,除非确实需要,否则不要使用此方法,并调用此方法之前运行PRAGMAtrusted_schema = OFF或" db config trust_schema 0 "方法.

此方法映射到sqlite3_enable_load_extension() C / C ++接口.

"存在"方法

"存在"方法与" onecolumn"和" eval"相似,因为它执行SQL语句. 区别在于," exists"方法始终返回一个布尔值,如果它执行的SQL语句中的查询返回一个或多个行,则返回TRUE,如果SQL返回一个空集则返回FALSE.

"存在"方法通常用于测试表中是否存在行. 例如:

如果{[db存在{从table1 WHERE user = $ user}中选择1个}}} {
#处理$ user是否存在
}其他{
#处理$ user不存在
}

" last_insert_rowid"方法

" last_insert_rowid"方法返回一个整数,该整数是最近插入的数据库行的ROWID.

"功能"方法

"函数"方法向SQLite引擎注册新的SQL函数. 参数是新SQL函数的名称,以及实现该函数的TCL命令. 在调用之前,该函数的参数会附加到TCL命令中.

出于安全原因,建议应用程序在使用此方法之前先设置PRAGMAtrusted_schema = OFF或运行" db config trust_schema 0 "方法.

下面的示例创建一个名为" hex"的新SQL函数,该函数将其数字参数转换为十六进制编码的字符串:

db function hex {format 0x%X}

"函数"方法接受以下选项:

-argcount

指定SQL函数接受的参数数量. 默认值-1表示任意数量的参数.

确定性的

此选项表示给定相同的参数值,该函数将始终返回相同的答案. SQLite查询优化器使用此信息来缓存具有恒定输入的函数调用的答案,并重用结果,而不是重复调用该函数.

-directonly

此选项将功能限制为只能由直接的顶级SQL语句使用. 触发器,视图,CHECK约束,生成的列或索引表达式将无法使用该功能. 对于所有应用程序定义的SQL函数,建议使用此选项,对于任何有副作用或显示应用程序内部状态的SQL函数, 强烈建议使用此选项.

安全警告:没有此开关,攻击者可能能够更改数据库文件的架构,以将新功能包括在触发器或视图或CHECK约束中,从而诱使应用程序使用攻击者选择的参数运行该功能. 因此,如果新功能具有副作用或显示有关应用程序的内部状态,并且未使用-directonly选项,则可能是潜在的安全漏洞.

-无害

此选项表明该函数没有副作用,并且不会泄漏任何无法直接从其输入参数计算出的信息. 指定此选项后,即使PRAGMA trust_schema = OFF ,该函数也可以在触发器,视图,CHECK约束,生成的列和/或索引表达式中使用. 除非确实需要,否则不建议使用此选项.

-returntype整数|实数|文本| blob |任何

此选项用于配置函数返回的结果的类型. 如果将此选项设置为" any"(默认值),则SQLite会尝试根据Tcl值的内部类型确定函数实现返回的每个值的类型. 或者,如果将其设置为" text"或" blob",则返回的值始终分别是text或blob值. 如果此选项设置为"整数",则SQLite会尝试将函数返回的值强制为整数. 如果没有数据丢失这是不可能的,它将尝试将其强制为真实值,最后退回到文本. 如果将此选项设置为" real",则尝试返回一个实数值,如果不可能,则返回文本.

"空值"方法

" nullvalue"方法更改作为" eval"方法的结果返回的NULL的表示形式.

db1 nullvalue NULL

由于Tcl缺少NULL表示形式,因此" nullvalue"方法可用于区分NULL和空列值. NULL值的默认表示是一个空字符串.

" onecolumn"方法

" onecolumn"方法的工作方式类似于" eval ",因为它评估作为参数给出的SQL查询语句. 区别在于" onecolumn"返回单个元素,该元素是查询结果第一行的第一列.

这是一种方便的方法. 它使用户不必为了提取单个列结果而对" eval"的结果执行" [lindex ... 0] ".

"变更"方法

" changes"方法返回一个整数,该整数是数据库中最新的" eval"方法插入,删除和/或修改的行数.

" total_changes"方法

" total_changes"方法返回一个整数,该整数是自首次打开当前数据库连接以来在数据库中插入,删除和/或修改的行数.

"授权人"方法

"授权者"方法提供对sqlite3_set_authorizer C / C ++接口的访问. authorizer的参数是在编译SQL语句以授权某些操作时调用的过程的名称. 回调过程采用5个参数,描述正在编码的操作. 如果回调返回文本字符串" SQLITE_OK",则允许该操作. 如果返回" SQLITE_IGNORE",则该操作将被静默禁用. 如果返回为" SQLITE_DENY",则编译将失败并显示错误.

如果参数为空字符串,则禁用授权者. 如果省略该参数,则返回当前的授权者.

" bind_fallback"方法

当没有TCL变量与参数名称匹配时," bind_fallback"方法使应用程序可以控制如何处理参数绑定.

eval方法在SQL语句中看到命名的SQL参数,例如" $ abc"或":def"或" @ghi"时,它将尝试查找具有相同名称的TCL变量,并将其值绑定TCL变量为SQL参数. 如果不存在这样的TCL变量,则默认行为是将SQL NULL值绑定到该参数. 但是,如果指定了bind_fallback proc,则将使用SQL参数的名称调用该proc,并将proc的返回值绑定到SQL参数. 或者,如果proc返回错误,则SQL语句将因该错误而中止. 如果proc返回的代码不是TCL_OK或TCL_ERROR,则SQL参数绑定到NULL,这与默认情况相同.

" bind_fallback"方法具有单个可选参数. 如果参数为空字符串,则取消bind_fallback并恢复默认行为. 如果参数是一个非空字符串,则该参数是当看到与任何TCL变量都不匹配的SQL参数时要调用的TCL命令(通常是proc的名称). 如果未给" bind_fallback"方法提供参数,那么将返回当前的bind_fallback命令.

例如,如果SQL语句包含与任何全局TCL变量都不匹配的参数,则以下设置会导致TCL引发错误:

 
  proc bind_error {nm} { 
    错误"没有这样的变量:$ nm" 
  } 
  db bind_fallback bind_error 
 

"进度"方法

此方法注册在查询处理期间定期调用的回调. 有两个参数:两次调用之间的SQLite虚拟机操作码数,以及要调用的TCL命令. 将进度回调设置为空字符串将其禁用.

进度回调可用于显示冗长查询的状态或在冗长查询期间处理GUI事件.

"整理"方法

此方法注册新的文本整理序列. 有两个参数:整理序列的名称和为整理序列实现比较功能的TCL过程的名称.

例如,以下代码实现了一个称为" NOCASE"的整理序列,该整理序列按文本顺序排序,而不考虑大小写:

 
  proc nocase_compare {ab} { 
    返回[字符串比较[字符串降低$ a] [字符串降低$ b]] 
  } 
  数据库整理NOCASE nocase_compare 
 

" collat​​ion_needed"方法

此方法注册一个回调例程,当SQLite引擎需要特定的整理序列但没有注册该整理序列时,将调用该例程. 回调可以注册整理序列. 使用单个参数调用回调,该参数是所需整理序列的名称.

" commit_hook"方法

此方法注册一个回调例程,该例程在SQLite尝试将更改提交到数据库之前被调用. 如果回调引发异常或返回非零结果,则事务将回滚而不是提交.

" rollback_hook"方法

此方法注册一个回调例程,该例程在SQLite尝试进行回滚之前被调用. 脚本参数运行时没有更改.

"状态"方法

此方法从最近评估的SQL语句返回状态信息. status方法采用单个参数,该参数应为" steps"或" sorts". 如果参数为" steps",则该方法返回前一个SQL语句评估的全表扫描步骤数. 如果参数为" sorts",则该方法返回排序操作的数量. 此信息可用于检测未使用索引来加快搜索或排序速度的查询.

状态方法基本上是sqlite3_stmt_status() C语言接口的包装.

" update_hook"方法

此方法注册一个回调例程,该例程在每行被UPDATE,INSERT或DELETE语句修改之前被调用. 在调用回调之前,会将四个参数附加到回调中:

" wal_hook"方法

此方法注册一个回调例程,当数据库处于WAL模式时,该例程在事务提交后调用. 在调用之前,将两个参数附加到回调命令中:

该方法可能决定运行检查点本身还是作为随后的空闲回调. 请注意,SQLite仅允许单个WAL挂钩. 默认情况下,此单个WAL挂钩用于自动检查点. 如果设置了显式WAL挂钩,则该WAL挂钩必须确保发生检查点,因为将禁用自动检查点机制.

此方法应返回一个等于SQLite错误代码的整数值(如果成功,对于SQLITE_OK通常为0;如果发生某些错误,对于SQLITE_ERROR通常为1). 与sqlite3_wal_hook()中一样 ,返回与SQLite错误代码不对应的整数的结果是不确定的. 如果脚本返回的值不能解释为整数值,或者脚本抛出Tcl异常,则SQLite不返回任何错误,但会引发Tcl背景错误.

" incrblob"方法

此方法打开一个TCL通道,可用于读取或写入数据库中预先存在的BLOB. 语法如下:

incrblob ?-readonly? incrblob 吗?

该命令返回一个新的TCL通道,用于读取或写入BLOB. 使用基础的sqlite3_blob_open() C语言接口打开通道. 使用TCL的关闭命令关闭通道.

"错误代码"方法

此方法返回由最近的SQLite操作导致的数字错误代码.

"跟踪"方法

" trace"方法注册一个回调,该回调在编译每个SQL语句时被调用. SQL的文本在调用之前作为单个字符串附加到命令. 例如,可以使用它来保存应用程序执行的所有SQL操作的日志.

" trace_v2"方法

" trace_v2"方法注册一个在编译每个SQL语句时调用的回调. 语法如下:

trace_v2 ? trace_v2吗? ? ? ? ? ?

每当发生某些情况时,此命令将导致调用"回调"脚本. argument, which should be a TCL-list of zero or more of the following keywords: 条件由参数确定,该参数应为零或多个以下关键字的TCL列表:

每当运行新的SQL语句时,for 语句的跟踪都会使用两个参数来调用回调. 第一个参数是一个整数,它是指向基础sqlite3_stmt对象的指针的值. 该整数可用于将SQL语句文本与配置文件或行回调的结果相关联. 第二个参数是正在运行的SQL语句的未扩展文本. "未扩展"是指文本中的变量替换未扩展为变量值. 这与" trace"方法的行为不同,后者确实扩展了变量替换.

每个SQL语句完成时, 配置文件的跟踪将使用两个参数来调用回调. 第一个参数是一个整数,它是基础sqlite3_stmt对象的值. 第二个参数是该语句的近似运行时间(以纳秒为单位). 运行时是可用的最佳估计,具体取决于运行应用程序的平台的功能.

每当来自SQL语句的新结果行可用时,针对行的跟踪将使用单个参数调用回调. 参数是一个整数,它是基础sqlite3_stmt对象指针的值.

当数据库连接关闭时, 关闭跟踪将使用单个参数调用回调. 参数是一个整数,它是指向即将关闭的基础sqlite3对象的指针的值.

在数据库连接上只能注册一个跟踪回调. 每次使用" trace"或" trace_v2"都会取消所有先前的跟踪回调.

"备份"方法

"备份"方法制作活动数据库的备份副本. 命令语法如下:

backup ? 备份 ? ? ?

argument tells which database in the current connection should be backed up. 可选的参数指示应备份当前连接中的哪个数据库. 缺省值为main (或换句话说,主数据库文件). 要备份TEMP表,请使用temp . 备份的辅助数据库中使用添加到连接ATTACH命令,使用该数据库的名称,因为它被分配在ATTACH命令.

is the name of a file into which the backup is written. 是将备份写入其中的文件的名称. does not have to exist ahead of time, but if it does, it must be a well-formed SQLite database. 不必提前存在,但是如果存在,则它必须是格式正确的SQLite数据库.

"还原"方法

"还原"方法将内容从单独的数据库文件复制到当前数据库连接中,从而覆盖所有先前存在的内容. 命令语法如下:

restore ? 恢复 ? ? ?

argument tells which database in the current connection should be overwritten with new content. 可选的参数应使用新内容覆盖当前连接中的哪个数据库. 缺省值为main (或换句话说,主数据库文件). 要重新填充TEMP表,请使用temp . 要覆盖使用添加到连接的辅助数据库ATTACH命令,使用该数据库的名称,因为它被分配在ATTACH命令.

is the name of an existing well-formed SQLite database file from which the content is extracted. 是从中提取内容的现有格式良好的SQLite数据库文件的名称.

"序列化"方法

"序列化"方法创建一个BLOB,它是基础数据库的完整副本. 语法如下:

serialize ? 序列化 ? ? ?

可选参数是要序列化的模式或数据库的名称. 默认值为" main".

该例程返回一个TCL字节数组,该字节数组是所标识数据库的完整内容. 该字节数组可以写入文件中,然后用作普通的SQLite数据库,也可以通过TCP / IP连接发送到其他应用程序,或传递到另一个数据库连接的"反序列化"方法.

仅当使用-DSQLITE_ENABLE_DESERIALIZE编译SQLite时,此方法才起作用

"反序列化"方法

The "deserialize" method takes a TCL byte-array that contains an SQLite database file and adds it to the database connection. 语法为:

deserialize ? ?

The option argument identifies which attached database should receive the deserialization. The default is "main".

This command causes SQLite to disconnect from the previous database and reattach to an in-memory database with the content in . If is not a byte-array containing a well-defined SQLite database, then subsequent commands will likely return SQLITE_CORRUPT errors.

This method only functions if SQLite is compiled with -DSQLITE_ENABLE_DESERIALIZE

The "interrupt" method

The "interrupt" method invokes the sqlite3_interrupt() interface, causing any pending queries to halt.

The "version" method

Return the current library version. For example, "3.23.0".

The "profile" method

This method is used to profile the execution of SQL statements run by the application. 语法如下:

profile ? ?

Unless is an empty string, this method arranges for the to be evaluated after the execution of each SQL statement. Two arguments are appended to before it is invoked: the text of the SQL statement executed and the time elapsed while executing the statement, in nanoseconds.

A database handle may only have a single profile script registered at any time. If there is already a script registered when the profile method is invoked, the previous profile script is replaced by the new one. If the argument is an empty string, any previously registered profile callback is canceled but no new profile script is registered.

The "unlock_notify" method

The unlock_notify method is used access the sqlite3_unlock_notify() interface to the SQLite core library for testing purposes. The use of this method by applications is discouraged.

by  ICOPY.SITE