Small. Fast. Reliable.
Choose any three.

SQLite库的Tcl接口

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

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

API

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

sqlite3的命令的使用如下:

sqlite3   dbcmd数据库名称?选项?

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

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

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

-创建 布尔

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

-nomutex BOOLEAN

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

-readonly BOOLEAN

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

-uri BOOLEAN

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

-vfs VFSNAME

使用由参数命名的备用VFS

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

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

“评估”方法

最有用的dbcmd方法是“ eval”。eval方法用于在数据库上执行SQL。eval方法的语法如下所示:

dbcmd  评估  ?选项?  sql   ?数组名??脚本

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

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

上面的代码使用ab列 创建了一个名为t1的新表。有什么可能更简单?

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

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

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

1你好2再见3你好!

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

db1 eval {SELECT * FROM t1
    OR BY BY a}值{ parray值
    放“”
}

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

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

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

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

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

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

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

db1 eval {SELECT * FROM t1 OR BY BY} {
    放入“ 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数据库的“关闭”方法只是关闭数据库。这具有删除dbcmd Tcl命令的 副作用。这是打开然后立即关闭数据库的示例:

sqlite3 db1 ./testdb
db1关闭

如果直接删除dbcmd,则与调用“关闭”方法具有相同的效果。因此,以下代码与前面的代码等效:

sqlite3 db1 ./testdb
重命名db1 {}

“交易”方法

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

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

语法如下所示:

dbcmd  事务  吗?事务类型?   脚本

交易类型可以是一个推迟独家直接。默认为推迟。

“缓存”方法

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

dbcmd  高速缓存大小  N

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

命令的第二种形式是:

dbcmd  缓存刷新

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

“完成”方法

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

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

“配置”方法

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

dbcmd  配置

上面将返回如下内容:

防御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

“复制”方法

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

dbcmd  复制  冲突算法   表名   文件名      ?列分隔符??空指示符

冲突算法必须是INSERT语句的SQLite冲突算法之一:rollbackabortfailignorereplace。有关更多信息,请参见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 ++接口。

“存在”方法

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

“存在”方法通常用于测试表中是否存在行。例如:

如果{[db存在{从table1中的SELECT 1 WHERE user = $ user}]}}
   ##如果$ user存在,则进行    处理
} else {
#如果$ 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命令(通常是proc的名称),只要看到一个与任何TCL变量都不匹配的SQL参数,就调用该命令。如果未给“ 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。语法如下:

dbcmd   incrblob  吗?   ?D B?表列行

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

“错误代码”方法

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

“跟踪”方法

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

“ trace_v2”方法

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

dbcmd   trace_v2  吗?回调??面具

每当发生某些情况时,此命令将导致调用“回调”脚本。条件由mask 参数确定,该参数应为零或多个以下关键字的TCL列表:

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

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

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

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

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

“备份”方法

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

dbcmd  备份  ?源数据库?  备份文件名

可选的source-database参数指示应备份当前连接中的哪个数据库。默认值为main (或换句话说,主数据库文件)。要备份TEMP表,请使用temp。备份的辅助数据库中使用添加到连接ATTACH命令,使用该数据库的名称,因为它被分配在ATTACH命令。

备份文件名是到其中的备份写入一个文件的名称。 备份文件名不必提前存在,但是如果存在,则它必须是格式正确的SQLite数据库。

“还原”方法

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

dbcmd  恢复  ?目标数据库?  源文件名

可选的target-database参数指示应使用新内容覆盖当前连接中的哪个数据库。默认值为main (或换句话说,主数据库文件)。要重新填充TEMP表,请使用temp。要覆盖使用添加到连接的辅助数据库ATTACH命令,使用该数据库的名称,因为它被分配在ATTACH命令。

源文件名是从其中提取的内容的现有合式SQLite数据库文件的名称。

“序列化”方法

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

dbcmd  序列化  ?数据库

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

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

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

“反序列化”方法

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

dbcmd  反序列化  ?数据库?  价值

选项数据库参数标识哪个附加数据库应接收反序列化。默认值为“ main”。

此命令使SQLite与先前的数据库断开连接,并重新连接到value为内容的内存数据库。如果value 不是包含定义良好的SQLite数据库的字节数组,则后续命令可能会返回SQLITE_CORRUPT错误。

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

“中断”方法

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

“版本”方法

返回当前库版本。例如,“ 3.23.0”。

“配置文件”方法

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

dbcmd  配置文件  ?脚本

除非script为空字符串,否则此方法安排 在执行每个SQL语句之后对脚本进行评估。在调用脚本之前,会将两个参数附加到脚本:执行的SQL语句的文本和执行该语句所花费的时间(以纳秒为单位)。

数据库句柄在任何时候都只能注册一个配置文件脚本。如果在调用概要文件方法时已经注册了一个脚本,则以前的概要文件脚本将被新的脚本替换。如果脚本参数为空字符串,则将 取消任何先前注册的配置文件回调,但不会注册任何新的配置文件脚本。

“ unlock_notify”方法

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