gpt4 book ai didi

vb.net - 如何在 SQLite 中搜索特定的 BLOB?

转载 作者:行者123 更新时间:2023-12-03 00:57:55 25 4
gpt4 key购买 nike

我将图片中的二进制数据写入 SQLite 数据库中名为“icondata”的 BLOB 字段。

CREATE TABLE pictures(id INTEGER PRIMARY KEY AUTOINCREMENT, icondata BLOB)

写入二进制数据的代码片段是:

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 个完全匹配的条目?

最佳答案

您可以搜索 BLOB,这里有一些示例:-

DROP TABLE IF EXISTS pictures;
CREATE TABLE IF NOT EXISTS pictures (id INTEGER PRIMARY KEY, icondata columntypedoesnotmatter);
INSERT INTO pictures (icondata) VALUES
(x'fff1f2f3f4f5f6f7f8f9f0fff1f2f3f4f5f6f7f8f9f0'),
(x'ffffffffffffffffffff'),
(x'010203040506070809'),
(x'010203040506070809010203040506070809')
;
SELECT id, hex(icondata) FROM pictures WHERE icondata = x'010203040506070809' OR icondata = x'FFFFFFFFFFFFFFFFFFFF';
SELECT id, hex(icondata) FROM pictures WHERE icondata LIKE '%'||x'F0'||'%';
SELECT id, hex(icondata) FROM pictures WHERE hex(icondata) LIKE '%F0%';

这会导致:-

第一个查询按预期找到 2 行(第 2 行和第 3 行)

SELECT id, hex(icondata) FROM pictures WHERE icondata = x'010203040506070809' OR icondata = x'FFFFFFFFFFFFFFFFFFFF'; 结果:-

enter image description here

第二个查询未按预期工作,是如何不使用 LIKE 的示例:-即 SELECT id, hex(icondata) FROM pictures WHERE icondata LIKE '%'||x'F0'||'%'; 会导致意外的两行:-

enter image description here

  • 我认为此行为是由于仅检查高位/低位位造成的,但我找不到相关文档。

但是,第三个查询使用 hex 函数将存储的 blob 转换为其十六进制字符串表示形式,并将其与 F0 的字符串表示形式进行比较

SELECT id, hex(icondata) FROM pictures WHERE hex(icondata) LIKE '%F0%'; 结果是预期的单行:-

enter image description here

我从未使用过 vb.net,所以我不确定您如何将上述代码编码为传递参数。

关于vb.net - 如何在 SQLite 中搜索特定的 BLOB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54106519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com