我试图执行准备好的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())
有什么想法吗?
答案 0 :(得分:1)
我自己没有尝试过,但根据SQLite docs,您需要在预准备语句上调用sqlite3_step
C函数来运行它。看起来这个函数映射到erlang-sqlite3中的sqlite3:next/2
,所以我认为你需要这样做
sqlite3:next(db3, R1). %% Is it R1 or B1?