【问题标题】:How to manually insert a BLOB into a SQLite database如何手动将 BLOB 插入 SQLite 数据库
【发布时间】:2019-12-15 14:13:48
【问题描述】:

我想知道如何手动将 BLOB 插入我的 SQLite 数据库。手动我的意思是,不使用将完成命令的驱动程序功能,如setBytes

Connection con = DriverManager.getConnection("jdbc:sqlite:database.db");
PreparedStatement stmt = con.prepareStatement("INSERT OR REPLACE INTO test (id, aBlobColumn) VALUES (0, ?)";
stmt.setBytes(1, new byte[] {0x37, 0xe7, 0x9f});
stmt.executeUpdate();

是否可以使用这样的命令:

INSERT OR REPLACE INTO test (id, aBlobColumn) VALUES (0, 37e79f);

或者类似的:

INSERT OR REPLACE INTO test (id, aBlobColumn) VALUES (0, BLOB(37, e7, 9f));

我不介意命令是否包含base64数据或原始数据,我不想专门使用十六进制。

【问题讨论】:

  • 你用base-64编码的数据试过了吗?
  • 不行
  • 在什么方面不起作用?我刚刚将一个 1 MB 的 base-64 编码图像插入到 BLOB 列中,没有问题。
  • 如果要存储 base64 字符串,则使用 blob 毫无意义(这通常是个坏主意,因为 base 64 编码的数据比原始二进制 blob 占用更多空间。)。 Blob 文字看起来像 X'hexdigits' 顺便说一句。每个字节两位数。
  • 是的,当然,这就是我想要做的:插入一个原始二进制 BLOB,但使用可以存储为字符串的命令。 X'hexdigits' 符号是我正在寻找的。谢谢。

标签: sql sqlite blob


【解决方案1】:

您可以使用以下内容:-

INSERT OR REPLACE INTO test (id, aBlobColumn) VALUES (0, x'37e79f');

但是,该值必须是十六进制字符串才能成为 BLOB。

【讨论】:

  • 谢谢,这就是我要找的。有没有办法使用 base64 编码甚至原始数据来缩短命令?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-23
  • 1970-01-01
  • 2019-02-22
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多