erlang-sqlite3 如何使用绑定参数执行插入语句

erlang-sqlite3 How to execute insert statement with binded parameters

我已尝试执行准备好的插入语句,但找不到可以执行准备代码的函数。

让我们创建一个测试数据库:

打开数据库:

{ok,Pid3} = sqlite3:open(db3).

创建table:

Sql1 =<<"CREATE TABLE test (
           id INTEGER PRIMARY KEY,
           ts TEXT default (datetime('now')),
           key TEXT,
           val TEXT
           );">>.
sqlite3:sql_exec(db3,Sql1).

准备带参数的插入语句:

Sql2. =<<"insert into test (key,val) values (@p_key,@p_val);">>.
{ok,B1} = sqlite2:prepare(db3,Sql2).

现在绑定值:

 sqlite3:bind(db3,B1,[{'@p_key',<<"test_key2">>},{'@p_val',<<"test_val2">>}]).

看起来唯一适合的函数是: sql_exec(db(), iodata(), [sql_value() | {atom() | string() | integer(), sql_value()}])

但它不接受绑定引用 (pid())

有什么想法吗?

我自己没试过,但是根据 SQLite docs,你需要在准备好的语句上调用 sqlite3_step C 函数来 运行 它。看起来这个函数映射到 erlang-sqlite3 中的 sqlite3:next/2,所以我认为你需要这样做

sqlite3:next(db3, R1). %% Is it R1 or B1?