在node-sqlite3中绑定blob参数

时间:2018-03-05 13:25:04

标签: node.js sqlite node-sqlite3

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

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");

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

尝试将字符串转换为blob:

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

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