我有一个具有 Sqlite 后端的 Tcl TK 应用程序。我非常了解插入、操作和读取字符串数据的语法;但是,我不明白如何使用 Tcl 将图片或文件存储到 Sqlite 中。
我知道我必须在 Sqlite 中创建一个包含 BLOB 数据的列。我只是不知道在 Tcl 方面该做什么。如果有人知道如何做到这一点或有一个很好的参考可以为我提供建议,我将不胜感激。
谢谢,
达米恩
在我的代码中,我基本上将文件作为二进制文件打开,将其内容加载到 Tcl 变量中,然后将其填充到 SQLite db 中。所以,像这样的事情......
# 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
该命令返回用于读取或写入 BLOB 的新 TCL 通道。使用底层 sqlite3_blob_open() C 语言接口打开通道。使用 TCL 的关闭命令关闭通道。