我有了一個SQLite後端一個Tcl TK應用。我非常理解插入,操作和讀取字符串數據的語法;但是,我不明白如何使用Tcl將圖片或文件存儲到Sqlite中。如何存儲BLOB數據SQLite中使用Tcl
我知道我必須創建一個保存在SQLite的BLOB數據的列。我只是不知道在Tcl方面做什麼。如果有人知道如何做到這一點,或者有很好的參考建議,我會很感激。
謝謝
Damion
我有了一個SQLite後端一個Tcl TK應用。我非常理解插入,操作和讀取字符串數據的語法;但是,我不明白如何使用Tcl將圖片或文件存儲到Sqlite中。如何存儲BLOB數據SQLite中使用Tcl
我知道我必須創建一個保存在SQLite的BLOB數據的列。我只是不知道在Tcl方面做什麼。如果有人知道如何做到這一點,或者有很好的參考建議,我會很感激。
謝謝
Damion
在我的代碼中,我基本上打開文件作爲二進制文件,將其內容加載到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)}
很明顯,你會想季節的味道,和你的表可能會包含額外的列...
的incrblob
命令看起來像你想要什麼:http://sqlite.org/tclsqlite.html#incrblob
的 「incrblob」 方法
這種方法打開TCL信道 能用於讀取或寫入數據庫中已存在的BLOB的 。該 語法是這樣的:
dbcmd incrblob ?-readonly?? ?DB? TABLE COLUMN ROWID
該命令返回一個新的信道TCL爲 讀取或寫入到BLOB。 使用 底層sqlite3_blob_open() C語言接口打開該通道。使用TCL的關閉命令關閉 頻道。
感謝傑夫 - 這看起來很有希望。變量$ file如何被設置爲文檔?我知道你的代碼需要$ file並將其更改爲二進制格式,以便它可以插入到sqlite中;但是,文檔(文件,pdf,文本等)如何識別爲$文件或設置爲$文件? 謝謝, DFM – DFM 2009-10-27 14:19:19
Damion, 在我上面的代碼中,「$ file」只是一個變量,它包含要存儲在數據庫中的文件的*名稱*。所以,文件實際上並不重要。您只需要將文件的名稱分配給「文件」變量。這是否回答你的問題? – 2009-11-04 22:08:14