【发布时间】:2019-06-04 00:20:55
【问题描述】:
我将图片中的二进制数据写入我的 SQLite 数据库到一个名为“icondata”的 BLOB 字段中。
CREATE TABLE pictures(id INTEGER PRIMARY KEY AUTOINCREMENT, icondata BLOB)
写入二进制数据的代码sn-p为:
SQLcommand.CommandText = "INSERT INTO pictures (id, icondata) VALUES (" & MyInteger & "," & "@img)"
SQLcommand.Prepare()
SQLcommand.Parameters.Add("@img", DbType.Binary, PicData.Length)
SQLcommand.Parameters("@img").Value = PicData
这很好用,我可以使用SQlite Spy 之类的工具在数据库中找到 BLOB 值。
但是如何搜索特定的“icondata”BLOB?
如果我尝试一下:
SQLcommand.CommandText = "SELECT id FROM pictures WHERE icondata=@img"
和上面一样的参数:
SQLcommand.Prepare()
SQLcommand.Parameters.Add("@img", DbType.Binary, PicData.Length)
SQLcommand.Parameters("@img").Value = PicData
Dim SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader()
While SQLreader.Read()
... Process found database entries....
End While
我没有得到任何结果。
如果我将 SELECT 查询更改为“LIKE”而不是“=”,我会得到所有带有 BLOB 的条目,而不仅仅是匹配的条目。
我必须如何编写 SELECT 查询才能找到特定 BLOB 的 1 个完全匹配的条目?
【问题讨论】:
-
您真的要搜索数据吗?我想你想搜索一张图片,因为它的
id?! -
你的表定义是什么?
-
根据图像的实际二进制数据检索数据真是太疯狂了。如果您不打算通过 ID 或标签等进行检索,那么至少存储二进制数据的哈希值,然后检索将是对您拥有的二进制数据进行哈希处理,然后使用相同的哈希值检索记录的情况。通过二进制数据本身检索简直是疯了。
-
@corion @ jmcihinney 我知道搜索二进制数据并不是最好的方法。你知道解决办法吗?
-
@shawn 表定义命令写在我帖子的第二行。您需要更多信息吗?