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

时间:2015-03-02 10:16:10

标签: sqlite erlang

我试图执行准备好的insert语句,但找不到可以执行准备好的代码的函数。

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

打开数据库:

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

创建表格:

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())

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

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