在 node-sqlite3 中绑定 blob 参数
Bind blob parameter in node-sqlite3
我有一个 SQLite3 table 和 BLOB 主键 (id
):
CREATE TABLE item (
id BLOB PRIMARY KEY,
title VARCHAR(100)
);
在 javascript 模型中,主键 (id
) 表示为 Javascript 字符串(每个字符一个十六进制字节):
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");
尝试将字符串转换为 blob:
INSERT INTO item(id, title) VALUES(CAST(id_string AS BLOB), 'foo');
另请注意,在 SQL 中引用字符串的正确方法是使用单引号。
显然,字符串需要转换为缓冲区:
db.run('INSERT INTO item (id, title) VALUES ($id, $title)', {
$id: Buffer.from(item.id, 'hex'),
$title: item.title
});
我有一个 SQLite3 table 和 BLOB 主键 (id
):
CREATE TABLE item (
id BLOB PRIMARY KEY,
title VARCHAR(100)
);
在 javascript 模型中,主键 (id
) 表示为 Javascript 字符串(每个字符一个十六进制字节):
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");
尝试将字符串转换为 blob:
INSERT INTO item(id, title) VALUES(CAST(id_string AS BLOB), 'foo');
另请注意,在 SQL 中引用字符串的正确方法是使用单引号。
显然,字符串需要转换为缓冲区:
db.run('INSERT INTO item (id, title) VALUES ($id, $title)', {
$id: Buffer.from(item.id, 'hex'),
$title: item.title
});