我有一个字符串缓冲区,我将其重新用于多个查询。我想要:
- 分配字符串
- 传递给
sqlite3_bind_text
- 执行语句
sqlite3_step
- 重置语句
sqlite3_reset
- 转到 2
我想我应该没问题,但是有人可以确认 SQLite 在此之后不需要指向字符串的指针吗?
我有一个字符串缓冲区,我将其重新用于多个查询。我想要:
sqlite3_bind_text
sqlite3_step
sqlite3_reset
我想我应该没问题,但是有人可以确认 SQLite 在此之后不需要指向字符串的指针吗?
sqlite3_reset()
例程不会清除绑定。有关详细信息,请参阅SQLite 绑定文档。如果再次执行该语句,绑定将被重新使用。
您可以假设释放字符串是安全的,只要语句在单步执行之前再次绑定参数。为了安全起见,您可以在释放分配的字符串之前将参数绑定到静态字符串。
基于以下评论和细化要求的附录:
如果要重用缓冲区而不是释放它,最安全的方法是在 sqlite_reset 之后修改缓冲区,然后在下一个 sqlite3_step 之前使用修改后的缓冲区调用 sqlite3_bind_text。在这种情况下,用作SQLITE_STATIC
绑定类型(的第五个参数sqlite3_bind_text
)。
使用SQLITE_TRANSIENT
强制 sqlite 复制字符串;使用该选项,您可以在调用sqlite3_bind_text
. 在这种情况下,这是不必要的;通过消除内存分配,使用SQLITE_STATIC
将更有效。