正如Sqlite文档指定的那样,预准备语句中的未绑定参数被解释为NULL - 我的问题是:
有没有办法让Sqlite确保所有参数至少被绑定一次,从而确保没有人偶然错过?
最好收到错误并要求调用sqlite3_bind_null(statement_, col);
然后得到一个微妙的错误,因为我忘了在更新语句的where子句上调用sqlite3_bind_*
!
答案 0 :(得分:2)
使用当前的SQLite库无法将未绑定参数与设置为NULL的参数区分开来。
如果您查看sqlite3_bind_null()
的C源代码,您会发现它只是调用取消绑定参数的内部SQLite函数。因此,没有办法区分两种情况。
唯一的解决方案是使用您自己的函数包装SQLite C API函数,这些函数将执行一些簿记。您可以将位图与每个sqlite3_stmt
结构捆绑在一起,当且仅当绑定了相应的参数时,每个位都设置为true。您必须至少为sqlite3_bind_*()
函数和sqlite3_clear_bindings()
创建包装器。