3

我有一个字符串缓冲区,我将其重新用于多个查询。我想要:

  1. 分配字符串
  2. 传递给sqlite3_bind_text
  3. 执行语句sqlite3_step
  4. 重置语句sqlite3_reset
  5. 转到 2

我想我应该没问题,但是有人可以确认 SQLite 在此之后不需要指向字符串的指针吗?

4

1 回答 1

3

sqlite3_reset()例程不会清除绑定。有关详细信息,请参阅SQLite 绑定文档。如果再次执行该语句,绑定将被重新使用。

您可以假设释放字符串是安全的,只要语句在单步执行之前再次绑定参数。为了安全起见,您可以在释放分配的字符串之前将参数绑定到静态字符串。

基于以下评论和细化要求的附录:

如果要重用缓冲区而不是释放它,最安全的方法是在 sqlite_reset 之后修改缓冲区,然后在下一个 sqlite3_step 之前使用修改后的缓冲区调用 sqlite3_bind_text。在这种情况下,用作SQLITE_STATIC绑定类型(的第五个参数sqlite3_bind_text)。

使用SQLITE_TRANSIENT强制 sqlite 复制字符串;使用该选项,您可以在调用sqlite3_bind_text. 在这种情况下,这是不必要的;通过消除内存分配,使用SQLITE_STATIC将更有效。

于 2012-08-25T14:12:00.690 回答