SQLite库的设计使其非常易于从Tcl或Tcl / Tk脚本使用。SQLite 最初是Tcl扩展,而SQLite的主要测试套件是用TCL编写的。SQLite可以与任何编程语言一起使用,但是它与TCL的连接很深。
本文档概述了SQLite的Tcl编程接口。
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文本)}
上面的代码使用a和b列 创建了一个名为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冲突算法之一:rollback,abort, fail,ignore或replace。有关更多信息,请参见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方法最后设置的回调过程的名称。如果未设置回调过程,则返回一个空字符串。
默认情况下,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”方法返回一个整数,该整数是最近插入的数据库行的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”方法的工作方式类似于“ eval ”,因为它评估作为参数给出的SQL查询语句。区别在于“ onecolumn”返回单个元素,该元素是查询结果第一行的第一列。
这是一种方便的方法。它使用户不必为了提取单列结果而对“ eval”的结果执行“ [lindex ... 0] ”。
“ changes”方法返回一个整数,该整数是数据库中最新的“ eval”方法插入,删除和/或修改的行数。
“ total_changes”方法返回一个整数,该整数是自第一次打开当前数据库连接以来在数据库中插入,删除和/或修改的行数。
“授权者”方法提供对 sqlite3_set_authorizer C / C ++接口的访问。authorizer的参数是在编译SQL语句以授权某些操作时调用的过程的名称。回调过程采用5个参数,这些参数描述了要编码的操作。如果回调返回文本字符串“ SQLITE_OK”,则允许该操作。如果返回“ SQLITE_IGNORE”,则该操作将被静默禁用。如果返回为“ SQLITE_DENY”,则编译将失败并显示错误。
如果参数为空字符串,则禁用授权者。如果省略该参数,则返回当前的授权者。
当没有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
此方法注册一个回调例程,当SQLite引擎需要特定的整理序列但没有注册该整理序列时,将调用该例程。回调可以注册整理序列。使用单个参数调用回调,该参数是所需整理序列的名称。
此方法注册一个回调例程,该例程在SQLite尝试将更改提交到数据库之前被调用。如果回调引发异常或返回非零结果,则事务将回滚而不是提交。
此方法注册一个回调例程,该例程在SQLite尝试进行回滚之前被调用。脚本参数运行时没有更改。
此方法从最近评估的SQL语句返回状态信息。status方法采用单个参数,该参数应为“ steps”或“ sorts”。如果参数为“ steps”,则该方法返回前一个SQL语句评估的全表扫描步骤数。如果参数为“ sorts”,则该方法返回排序操作的数量。此信息可用于检测未使用索引来加快搜索或排序速度的查询。
status方法基本上是sqlite3_stmt_status() C语言接口的包装 。
此方法注册一个回调例程,该例程在每行被UPDATE,INSERT或DELETE语句修改之前被调用。在调用回调之前,会将四个参数附加到回调中:
此方法注册一个回调例程,当数据库处于WAL模式时,该例程在事务提交后调用。在调用之前,将两个参数附加到回调命令中:
该方法可能决定运行检查点本身还是作为后续的空闲回调。请注意,SQLite仅允许单个WAL挂钩。默认情况下,单个WAL挂钩用于自动检查点。如果设置了显式WAL挂钩,则该WAL挂钩必须确保发生检查点,因为自动检查点机制将被禁用。
此方法应返回一个等于SQLite错误代码的整数值(如果成功,对于SQLITE_OK通常为0;如果发生某些错误,对于SQLITE_ERROR通常为1)。与sqlite3_wal_hook()中一样,返回与SQLite错误代码不对应的整数的结果是不确定的。如果脚本返回的值不能解释为整数值,或者脚本抛出Tcl异常,则不会向SQLite返回任何错误,但会引发Tcl背景错误。
此方法打开一个TCL通道,该通道可用于读取或写入数据库中预先存在的BLOB。语法如下:
dbcmd incrblob 吗? ?D B?表列行
该命令返回一个新的TCL通道,用于读取或写入BLOB。使用基础sqlite3_blob_open() C语言接口打开通道 。使用TCL的关闭命令关闭通道。
此方法返回由最近的SQLite操作导致的数字错误代码。
“ trace”方法注册一个回调,该回调在编译每个SQL语句时被调用。SQL的文本在调用之前作为单个字符串附加到命令。例如,可以使用它来保存应用程序执行的所有SQL操作的日志。
“ 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()接口,从而导致所有待处理的查询都暂停。
此方法用于分析应用程序运行的SQL语句的执行。语法如下:
dbcmd 配置文件 ?脚本?
除非script为空字符串,否则此方法安排 在执行每个SQL语句之后对脚本进行评估。在调用脚本之前,会将两个参数附加到脚本:执行的SQL语句的文本和执行该语句所花费的时间(以纳秒为单位)。
数据库句柄在任何时候都只能注册一个配置文件脚本。如果在调用概要文件方法时已经注册了一个脚本,则以前的概要文件脚本将被新的脚本替换。如果脚本参数为空字符串,则将 取消任何先前注册的配置文件回调,但不会注册任何新的配置文件脚本。
unlock_notify方法用于将sqlite3_unlock_notify() 接口访问SQLite核心库,以进行测试。不鼓励应用程序使用此方法。