gpt4 book ai didi

c - 是否可以将回调函数与 sqlite prepare v2() 结合使用

转载 作者:行者123 更新时间:2023-11-30 16:14:50 24 4
gpt4 key购买 nike

所以我在参数化查询以及将它们与 C 中的回调函数结合使用方面遇到了一些问题。

因此,使用 sqlite3_exec(...),您可以执行 SQL 查询并提供回调函数作为参数。回调函数用于打印查询输出

但是我想使用参数化查询,所以我必须使用 sqlite3_prepare_v2()、sqlite3_bind 函数之一、sqlite3_step() 和 sqlite3_finalize(),它们不支持回调函数作为参数。

还有其他功能可以让我两全其美吗?(旁注:我尝试执行的 SQL 语句只是一个单行查询)

最佳答案

请注意 the API docs for sqlite3_exec() 的主要评论:

The sqlite3_exec() interface is a convenience wrapper around sqlite3_prepare_v2(), sqlite3_step(), and sqlite3_finalize(), that allows an application to run multiple statements of SQL without having to use a lot of C code.

您应该从中吸取的东西包括:

  • 基于回调的接口(interface)不是主要 API。
  • 它是根据其他可访问函数编写的,因此您可以编写自己的类似函数来提供您想要的任何回调接口(interface)。

如果您确实需要一个与参数化准备好的语句一起使用的回调接口(interface),那么您确实需要自己编写一个适当的 sqlite3_exec() 类似物。如果您想尽可能接近sqlite3_exec(),那么您可以使用类似的签名,用指向(已准备好并填充的)准备好的语句的指针代替前两个参数。然后,该函数需要通过多次调用 sqlite3_step() 来执行查询,每次从结果行中提取所需的数据 (sqlite3_column_sometype() * n),传递将它们传递给回调函数,并适本地处理回调的返回值。

那里有很大的定制空间,特别是如果您确实只有一个查询需要支持的话。例如,您可以将参数传递给函数,而不是要求预先绑定(bind)它们。您很可能会更改回调函数的签名,以便更好地匹配查询结果,并且如果只支持一个查询,那么可能不需要告知列名称。

如果事实证明您确实知道每行应该调用的特定函数,那么它根本不必是回调接口(interface),因为您会收到一个函数指针作为参数。在这种情况下,您可以直接调用该函数。

关于c - 是否可以将回调函数与 sqlite prepare v2() 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57366226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com