SQLite简介
SQLite数据库是一款非常著名的关系数据库,它以小巧、跨平台、稳定、高效而著称。现在绝大多数手机应用都会运用它进行数据管理。你所熟知的SQLite可能是上面描述的那样,但是它有一个你所不熟悉的一面,它实际上源自于TCL的一个应用。下面这段话来自于SQLite的官方网站:

现在的SQLite是完全由C语言编写,但是由于它的出生原因,它与TCL语言有着更好的交互特性。接下来我们就来介绍一下SQLite官方提供的与TCL交互的库:sqlite3。
TCL的sqlite3库
实际上SQLite官网有着最准确的接口帮助文档,我们这里只争对性的做些介绍。首先该库提供了一个命令:sqlite3,其基本语法如下所示:
sqlite3 dbcmd ?database-name? ?options?
命令中的dbcmd是用户自定义的在执行完该命令后,用于访问指定数据库的命令名称。实际上上述命令就是用于创建一个数据库连接并生成一个针对该数据库操作的命令名称。这里我们尤其要指出它可以创建一种不依赖与磁盘文件的纯内存数据库,它的读写效率会非常高,它基本完整的SQLite数据库能力,其创建方法如下:
sqlite3 MyDB :memory:
上述命令在TCL当前解释器中创建了一个内存数据库,操作该数据的命令名称为MyDB。执行完上述命令后,用户便可以在TCL当前的解释器中执行MyDB命令了。MyDB命令将包含众多SQLite预定义的子命令,如下所示:

数据库连接创建
在上一节我们已经给出了sqlite3库用于创建和连接sqlite数据库的命令和其语法格式。这里我们需要明确指出,sqlite3命令可以创建和连接两种形式的sqlite数据库,一种是存储在本地磁盘上的文件数据库,一种是纯内存数据库。下面我们来介绍如何创建一个本地磁盘数据的连接,下面给出一个示例:
sqlite3 MyDB $path
该命令会检查$path值对应的文件是否存在,如果存在则把该文件作为目标SQLite数据库文件创建MyDB命令对其进行操控;如果该文件不存在则创建这个文件,并创建MyDB命令对其进行操控。实际上这里隐含了一个sqlite3命令的选项-create,它用于指定如果$path指定的文件不存在是否创建新的文件,该选项的默认值是true,即如果文件不存在就使用该路径创建一个空数据库文件。该命令还提供了一些其他的选项控制,用于控制单线程和多线程访问数据库等,这里不做细致讨论。
执行SQL语句
创建完数据库连接后,我们就可以使用类似MyDB这种定义的名称对数据库进行访问操作。通常我们执行SQL语句使用的命令是:
MyDB eval ?-withoutnulls? sql ?array-name? ?script?
eval子命令是用于执行SQL语句的命令,该命令实际上有两种使用方式:一种是省略最后两个参数(?array-name? ?script?),这种方式我们需要通过该命令的返回值来获得SQL语句执行后的返回值,特别是在执行查询语句后;另一种是至少使用了参数array-name或者也是用了script参数,array-name参数用于指定返回结果所存储的数组名称,script参数用于指定一个脚本去处理array-name参数中的数据,这里的脚本执行逻辑类似for循环语句最后提供的脚本参数,它也是循环执行的,但是循环遍历的是SQL语句返回值的每一行数据,array-name参数中的子元素名称是SQL语句返回值对应的每一列的列名称,我们还可以通过$array-name(*)的方式获取当前返回值包含哪些列,数据是一个TCL列表。
数据库连接的关闭
我们使用close子命令来关闭指定打开的数据库连接,其语法如下:
MyDB close
执行该命令,TCL解释器还会删除MyDB这个命令。
总结
上面我们已经给出了基本的在TCL中使用sqlite3库操作sqlit数据库的方法,如果你还有更多疑问,请尽量参考官方提供的帮助文档。新爸持续为大家解答各种TCL/TK的使用和开发问题。



6402

被折叠的 条评论
为什么被折叠?



