SQLite3 C++,需要 sqlite3_stepback 的解决方法
SQLite3 C++, need a workaround for a sqlite3_stepback
我目前正在使用 sqlite3.c 文件中的功能在 C++ 中编写一个 .dll,该文件可以在官方 SQLite page
中找到
sqlite3.c 包含使用 sqlite3 执行基本操作的各种函数,例如连接到数据库、打开记录集、执行 SQL 语句等。
用于导航到记录集中下一条返回记录的函数之一是 sqlite3_step。不幸的是,没有 sqlite_stepback 或类似的东西。
在我的例子中,我需要执行一个步骤,然后在函数中执行一个后退以确定将返回的数据的大小,以便使用 .dll 的应用程序创建一个正确大小的缓冲区分配所有将返回的数据。
我需要以下两种可能的解决方法中的任何一种的帮助:
- 生成一种后退函数,问题是我不知道 sqlite3.c 的内部工作原理。
- 记录集存储在似乎定义为 sqlite3_stmt 的结构中。对于我的特定问题,我可以将完整的 sqlite3_stmt 复制到另一个变量,在复制的 sqlite3_stmt 中执行一个步骤,然后销毁它,将原始记录集原封不动地留在其当前位置。我还没找到正确复制 sqlite3_stmt.
的方法
如果可能的话,我认为最好的选择是第二个。
提前致谢:D
I need to do a step and then do a stepback in a function to determine the size of the data that will be returned
不,你不知道。如果你这样做了,其他人会比你先需要它,并且这个功能就会存在。因此我们知道其他方法是可能的,而且可能更好。
只需重新组织您接受调用者请求的方式以及您与 SQLite 交互的方式。也许,从某种意义上说,您必须比应用程序“领先一步”才能为其提供所需的信息。
当 sqlite3_step returns 时,您可以调用任意数量的函数来确定行中的值及其大小。你有你需要的。没有必要在那个时候回到上一行。
如果你怀疑我,我在 FreeTDS 上工作了很多年。 TDS 协议是来自 DBMS 的流。回不去了”。 FreeTDS 提供了三个 API,所有这些 API 都具有某种 client-side 游标,可以让应用程序滚动回先前提供的行。但该功能完全发生在客户端库中,没有服务器交互。
我实现了其中的一些,但从未在我的任何应用程序中使用过它。通过数据的最快方式是向前,一次。
我目前正在使用 sqlite3.c 文件中的功能在 C++ 中编写一个 .dll,该文件可以在官方 SQLite page
中找到sqlite3.c 包含使用 sqlite3 执行基本操作的各种函数,例如连接到数据库、打开记录集、执行 SQL 语句等。
用于导航到记录集中下一条返回记录的函数之一是 sqlite3_step。不幸的是,没有 sqlite_stepback 或类似的东西。
在我的例子中,我需要执行一个步骤,然后在函数中执行一个后退以确定将返回的数据的大小,以便使用 .dll 的应用程序创建一个正确大小的缓冲区分配所有将返回的数据。
我需要以下两种可能的解决方法中的任何一种的帮助:
- 生成一种后退函数,问题是我不知道 sqlite3.c 的内部工作原理。
- 记录集存储在似乎定义为 sqlite3_stmt 的结构中。对于我的特定问题,我可以将完整的 sqlite3_stmt 复制到另一个变量,在复制的 sqlite3_stmt 中执行一个步骤,然后销毁它,将原始记录集原封不动地留在其当前位置。我还没找到正确复制 sqlite3_stmt. 的方法
如果可能的话,我认为最好的选择是第二个。
提前致谢:D
I need to do a step and then do a stepback in a function to determine the size of the data that will be returned
不,你不知道。如果你这样做了,其他人会比你先需要它,并且这个功能就会存在。因此我们知道其他方法是可能的,而且可能更好。
只需重新组织您接受调用者请求的方式以及您与 SQLite 交互的方式。也许,从某种意义上说,您必须比应用程序“领先一步”才能为其提供所需的信息。
当 sqlite3_step returns 时,您可以调用任意数量的函数来确定行中的值及其大小。你有你需要的。没有必要在那个时候回到上一行。
如果你怀疑我,我在 FreeTDS 上工作了很多年。 TDS 协议是来自 DBMS 的流。回不去了”。 FreeTDS 提供了三个 API,所有这些 API 都具有某种 client-side 游标,可以让应用程序滚动回先前提供的行。但该功能完全发生在客户端库中,没有服务器交互。
我实现了其中的一些,但从未在我的任何应用程序中使用过它。通过数据的最快方式是向前,一次。