【问题标题】:Bind blob parameter in node-sqlite3在 node-sqlite3 中绑定 blob 参数
【发布时间】:2018-09-24 23:26:29
【问题描述】:

我有一个带有 BLOB 主键的 SQLite3 表 (id):

CREATE TABLE item (
    id BLOB PRIMARY KEY,
    title VARCHAR(100)
);

在 javascript 模型中,主键 (id) 表示为 Javascript 字符串(每个字符一个 HEX 字节):

var item = { 
    id: "2202D1B511604790922E5A090C81E169",
    title: "foo"
}

当我运行下面的查询时,id 参数被绑定为字符串。但我需要将其绑定为 BLOB。

db.run('INSERT INTO item (id, title) VALUES ($id, $title)', {
    $id: item.id,
    $title: item.title
});

为了说明,上面的代码生成如下SQL:

INSERT INTO item (id, title) VALUES ("2202D1B511604790922E5A090C81E169", "foo");

我需要的是这个:

INSERT INTO item (id, title) VALUES (X'2202D1B511604790922E5A090C81E169', "foo");

【问题讨论】:

    标签: node.js sqlite node-sqlite3


    【解决方案1】:

    显然,字符串需要转换为缓冲区:

    db.run('INSERT INTO item (id, title) VALUES ($id, $title)', {
        $id: Buffer.from(item.id, 'hex'),
        $title: item.title
    });
    

    【讨论】:

      【解决方案2】:

      尝试将字符串转换为 blob:

      INSERT INTO item(id, title) VALUES(CAST(id_string AS BLOB), 'foo');
      

      另请注意,在 SQL 中引用字符串的正确方法是使用单引号。

      【讨论】:

      • 奇怪的是,这完全没有任何作用。仍然作为字符串插入。
      • db.run('INSERT INTO item (id, title) VALUES (CAST($id as BLOB), $title)', { $id: item.id, $title: item.title });
      猜你喜欢
      • 2015-06-06
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      • 2016-03-22
      • 1970-01-01
      • 2020-04-22
      • 1970-01-01
      • 2016-06-09
      相关资源
      最近更新 更多