最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

TCL語言的SQLite3擴展庫

2022-06-04 19:11 作者:象喻  | 我要投稿

SQLite數(shù)據(jù)庫是由C語言編寫輕量級數(shù)據(jù)庫,跟TCL語言很有淵源。SQLite通過第三方擴展的形式支持24種語言,但是創(chuàng)始人 “理查德希普 D.RichardHipp” 的官方版只綁定了TCL語言。當(dāng)然后來的事情大家就都知道了,TCL語言山河日下、SQLite數(shù)據(jù)庫蒸蒸日上,并且早就已經(jīng)獨立了。但也正因為這段歷史淵源,SQLite對TCL語言的支持還是不錯的。

package require sqlite3

SQLite數(shù)據(jù)庫在TCL語言中是通過 SQLite3 這個庫來做支持,這是個二進制擴展庫,可以獨立實現(xiàn)SQLite的全部功能,不用再額外安裝SQLite程序了。

這個擴展庫提供的sqlite3命令跟proc命令類似,它接收兩個必要參數(shù),第一個參數(shù)是新命令的名字;第二個參數(shù)是數(shù)據(jù)庫的完整路徑,如果數(shù)據(jù)庫跟源代碼在同一個目錄里,那么只需要數(shù)據(jù)庫文件名就可以了。

sqlite3命令會創(chuàng)建一個新命令,新命令自帶一堆的子命令,并且自動調(diào)用對應(yīng)的數(shù)據(jù)庫文件(類似于面向?qū)ο蟾拍畹睦^承)。如果需要同時調(diào)用多個數(shù)據(jù)庫的話,就可以用sqlite3創(chuàng)建多個新命令,這些命令會分別調(diào)用指定的數(shù)據(jù)庫。

創(chuàng)建多個新命令調(diào)用同一個數(shù)據(jù)庫也是允許的,在絕大多數(shù)情況下這是為有自虐傾向的程序員準(zhǔn)備的,除非極其特殊的情況,否則不要這么干。

sqlite3? 新命令名? 數(shù)據(jù)庫名? ?可選參數(shù)??



可選參數(shù):

注:下例中db是新命令名test.db是數(shù)據(jù)庫文件名

-create ?true/false

默認是 -create ?true當(dāng)數(shù)據(jù)庫不存在時自動創(chuàng)建;如果是false則數(shù)據(jù)庫不存在時會報錯。

?sqlite3 db test.db -create false

-nomutex

關(guān)閉數(shù)據(jù)庫的互斥鎖。僅用于單線程的應(yīng)用程序,可以稍微提高性能。在多線程程序中可能會導(dǎo)致一些數(shù)據(jù)錯誤。

?sqlite3 db test.db -nomutex true

-readonly

以只讀模式打開數(shù)據(jù)庫。如果之前的數(shù)據(jù)庫進程沒有正常退出的話,有可能無法以只讀模式打開。

?sqlite3 db test.db -readonly true

-uri

uri是統(tǒng)一資源標(biāo)識符,如果使用了uri參數(shù),數(shù)據(jù)庫路徑這部分,就以uri來解析,更多信息參考文檔

?sqlite3 db test.db -uri true
uri相關(guān)文檔:https://www.sqlite.net.cn/uri.html

-vfs 虛擬文件系統(tǒng)名稱

VFS是指虛擬文件系統(tǒng),簡單的說就是一個文件系統(tǒng)的編程接口,通過VFS這種虛擬文件系統(tǒng)呢,可以對文件進行操作,而不用關(guān)心存儲介質(zhì)的類型(也就是不用操心是硬盤還是U盤,還是存儲卡);同時VFS也可以降低跨平臺的移植難度,在不同的操作系統(tǒng)上,只要底層實現(xiàn)了VFS,那么所有的文件操作,就都是通用的了。

sqlite3 db test.db -vfs win32

在本例中使用的win32是win系統(tǒng)的默認虛擬文件系統(tǒng)名稱,更多名稱參考文檔:

https://www.sqlite.net.cn/vfs.html


主要功能

eval:執(zhí)行sql

示例數(shù)據(jù)庫,表格名稱 tb


SQL語句內(nèi)替換

解釋一下這里的二次替換:在 db eval "SELECT * FROM tb WHERE id = $omg" 語句中,Tcl語言先按照語法把$omg替換成:orz,然后把替換后的"SELECT * FROM tb WHERE id = :orz"字符串提交給db eval命令,此時db eval命令再次將:orz替換成了2,于是就相當(dāng)于進行了二次替換。


nullvalue 設(shè)置空值形式

默認情況下TCL語言會使用空字符表示空值(TCL語言只有字符串一種數(shù)據(jù)類型,沒有空值)。但是在某些情況下這樣不行,該功能可以設(shè)置空值的形式,比如下例中,將空值設(shè)定為NULL(注意:在TCL語言里,NULL也只是字符串)

close 關(guān)閉數(shù)據(jù)庫

關(guān)閉數(shù)據(jù)庫會自動刪除相關(guān)的命令,比如下例中,db命令也自動被刪除了。

此外,如果通過TCL語言刪除了db命令,則與關(guān)閉數(shù)據(jù)庫效果一致。

backup 備份數(shù)據(jù)庫

backup 可以完整的備份整個數(shù)據(jù)庫,常用于將 :memory: 內(nèi)存數(shù)據(jù)庫保存到文件中

restore 恢復(fù)數(shù)據(jù)庫

從數(shù)據(jù)庫文件里,復(fù)制內(nèi)容到當(dāng)前數(shù)據(jù)庫中。注意:會覆蓋當(dāng)前數(shù)據(jù)庫里的內(nèi)容。常用于將數(shù)據(jù)庫導(dǎo)入 :memory: 內(nèi)存數(shù)據(jù)庫。

incrblob 讀寫二進制

該功能打開一個TCL通道,在通道中讀寫二進制數(shù)據(jù)。

其它功能

version 顯示版本

serialize/deserialize 序列化

這是成對命令,序列化和反序列化數(shù)據(jù)庫。序列化的作用是把數(shù)據(jù)庫轉(zhuǎn)換為二進制數(shù)據(jù),保存到TCL數(shù)組中,然后可以保存到文件里。也可以通過網(wǎng)絡(luò)通道,發(fā)送給其它程序,程序接收后,可以使用反序列化功能,將二進制數(shù)據(jù)轉(zhuǎn)換為完整的數(shù)據(jù)庫。

該功能需要使用特定的編譯參數(shù)編輯SQLite才能使用該功能。


*注意,還有許多功能沒有介紹,請參考官方文檔


TCL語言的SQLite3擴展庫的評論 (共 條)

分享到微博請遵守國家法律
互助| 凤城市| 竹溪县| 萍乡市| 潮州市| 布拖县| 大埔区| 上虞市| 师宗县| 安福县| 乌什县| 区。| 麻栗坡县| 黄陵县| 宝兴县| 北海市| 克东县| 安化县| 石家庄市| 朔州市| 连江县| 开封县| 阳高县| 大丰市| 舞阳县| 察哈| 孝感市| 墨竹工卡县| 常宁市| 两当县| 漠河县| 虹口区| 运城市| 陵水| 侯马市| 江城| 隆回县| 虹口区| 大名县| 富宁县| 当阳市|