使用Bash将大图像作为BLOB存储在SQLite DB中

时间:2014-09-06 20:45:28

标签: database image bash sqlite blob

我正在创建一个小脚本来导入SQLite数据库中的大图像目录, 我完全清楚SQLite不是存储大blob的最佳位置,但这就是我必须要做的事情。

实际上,我正在尝试使用hexdump:

sqlite3 name.db "INSERT INTO table (image) values(x'"$(hexdump -v -e '1/1 "%02x"' ./filename.jpg)"');"

但偶尔,在相当大的图像上,它会返回错误:

sqlite3: Argument list too long

你将如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

当SQL命令作为参数提供给sqlite3时,必须在生成之前生成hexdump的整个输出。可以实际使用该参数。

管道没有尺寸限制:

(echo -n "INSERT INTO table (image) values(x'"
 hexdump -v -e '1/1 "%02x"' ./filename.jpg
 echo "');") | sqlite3 name.db

或者,您可以将命令写入文件,并将sqlite3告诉.read

3.8.6或更高版本中的SQLite shell具有readfile() function来直接读取文件。