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

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 OR BY 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选项,则可能是潜在的安全漏洞.

-无害

此选项表明该函数没有副作用,并且不会泄漏任何无法直接从其输入参数计算出的信息. 指定此选项后,即使PRAGMAtrusted_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(默认情况下为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",则该方法返回排序操作的数量. 此信息可用于检测未使用索引来加快搜索或排序速度的查询.

status方法基本上是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时,此方法才起作用

"反序列化"方法

"反序列化"方法采用包含SQLite数据库文件的TCL字节数组,并将其添加到数据库连接中. 语法为:

deserialize ? 反序列化 ? ? ?

argument identifies which attached database should receive the deserialization. 选项参数标识哪个附加数据库应接收反序列化. 默认值为" main".

. 此命令使SQLite与先前的数据库断开连接,并重新连接到为内容的内存数据库. is not a byte-array containing a well-defined SQLite database, then subsequent commands will likely return SQLITE_CORRUPT errors. 如果不是包含定义良好的SQLite数据库的字节数组,则后续命令可能会返回SQLITE_CORRUPT错误.

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

"中断"方法

" interrupt"方法调用sqlite3_interrupt()接口,从而导致所有待处理的查询都暂停.

"版本"方法

返回当前库版本. 例如," 3.23.0".

"配置文件"方法

此方法用于分析应用程序运行的SQL语句的执行. 语法如下:

profile ? 配置文件 ? ? ?

is an empty string, this method arranges for the to be evaluated after the execution of each SQL statement. 除非为空字符串,否则此方法安排在执行每个SQL语句之后对进行评估. before it is invoked: the text of the SQL statement executed and the time elapsed while executing the statement, in nanoseconds. 在调用之前,会将两个参数附加到 :执行的SQL语句的文本和执行该语句所花费的时间(以纳秒为单位).

数据库句柄在任何时候都只能注册一个配置文件脚本. 如果调用概要文件方法时已经注册了一个脚本,则以前的概要文件脚本将被新的脚本替换. argument is an empty string, any previously registered profile callback is canceled but no new profile script is registered. 如果参数为空字符串,则取消任何先前注册的配置文件回调,但不注册新的配置文件脚本.

" unlock_notify"方法

unlock_notify方法用于访问sqlite3_unlock_notify()接口到SQLite核心库以进行测试. 不鼓励应用程序使用此方法.

by  ICOPY.SITE