2009-10-23 21 views
0

我有了一個SQLite後端一個Tcl TK應用。我非常理解插入,操作和讀取字符串數據的語法;但是,我不明白如何使用Tcl將圖片或文件存儲到Sqlite中。如何存儲BLOB數據SQLite中使用Tcl

我知道我必須創建一個保存在SQLite的BLOB數據的列。我只是不知道在Tcl方面做什麼。如果有人知道如何做到這一點,或者有很好的參考建議,我會很感激。

謝謝

Damion

回答

3

在我的代碼中,我基本上打開文件作爲二進制文件,將其內容加載到Tcl變量,並將其填充到SQLite數據庫。所以,這樣的事情...

# load the file's contents 
set fileID [open $file RDONLY] 
fconfigure $fileID -translation binary 
set content [read $fileID} 
close $fileID 

# store the data in a blob field of the db 
$db eval {INSERT OR REPLACE INTO files (content) VALUES ($content)} 

很明顯,你會想季節的味道,和你的表可能會包含額外的列...

+0

感謝傑夫 - 這看起來很有希望。變量$ file如何被設置爲文檔?我知道你的代碼需要$ file並將其更改爲二進制格式,以便它可以插入到sqlite中;但是,文檔(文件,pdf,文本等)如何識別爲$文件或設置爲$文件? 謝謝, DFM – DFM 2009-10-27 14:19:19

+0

Damion, 在我上面的代碼中,「$ file」只是一個變量,它包含要存儲在數據庫中的文件的*名稱*。所以,文件實際上並不重要。您只需要將文件的名稱分配給「文件」變量。這是否回答你的問題? – 2009-11-04 22:08:14

0

incrblob命令看起來像你想要什麼:http://sqlite.org/tclsqlite.html#incrblob

的 「incrblob」 方法

這種方法打開TCL信道 能用於讀取或寫入數據庫中已存在的BLOB的 。該 語法是這樣的:

dbcmd incrblob ?-readonly?? ?DB? TABLE COLUMN ROWID 

該命令返回一個新的信道TCL爲 讀取或寫入到BLOB。 使用 底層sqlite3_blob_open() C語言接口打開該通道。使用TCL的關閉命令關閉 頻道。

相關問題