Sqlite3 exec

来自泡泡学习笔记
BrainBs讨论 | 贡献2024年10月11日 (五) 17:34的版本 (创建页面,内容为“<pre> int sqlite3_exec ( sqlite3*, →‎打开的数据库:​ const char *sql, →‎要求值的sql:​ int (*callback)(void*,int,char**,char**), →‎回调函数:​ void *, →‎回调的第一个参数:​ char **errmsg →‎这里写的错误消息:​ ); </pre> sqlite3_exec()接口是对sqlite3_prepare_v2()、sqlite3_step()和sqlite3_finalize()的方便包装,它允许应用程序运行多个SQL语句,而不必使用大量的C代码。 在作为第一个参…”
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索
int sqlite3_exec (
sqlite3*, /*打开的数据库*/
const char *sql, /*要求值的sql */
int (*callback)(void*,int,char**,char**), /*回调函数*/
void *, /*回调的第一个参数*/
char **errmsg /*这里写的错误消息*/
);

sqlite3_exec()接口是对sqlite3_prepare_v2()、sqlite3_step()和sqlite3_finalize()的方便包装,它允许应用程序运行多个SQL语句,而不必使用大量的C代码。

在作为第一个参数传入的数据库连接的上下文中,sqlite3_exec()接口运行零条或多条UTF-8编码的、分号分隔的SQL语句,这些语句传递给它的第二个参数。如果sqlite3_exec()的第3个参数的回调函数不为NULL,则对计算SQL语句的每个结果行调用该回调函数。sqlite3_exec()的第4个参数传递给每个回调调用的第1个参数。如果指向sqlite3_exec()的回调指针为NULL,则不会调用回调,结果行将被忽略。

如果在计算传递给sqlite3_exec()的SQL语句时发生错误,则停止当前语句的执行,并跳过后续语句。如果sqlite3_exec()的第5个参数不是NULL,那么任何错误消息都被写入从sqlite3_malloc()获得的内存中,并通过第5个参数传递回来。为了避免内存泄漏,应用程序应该在不再需要错误消息字符串之后,对通过sqlite3_exec()的第5个参数返回的错误消息字符串调用sqlite3_free()。如果sqlite3_exec()的第5个参数不是NULL并且没有发生错误,那么sqlite3_exec()在返回之前将其第5个参数中的指针设置为NULL。

如果sqlite3_exec()回调返回非零,则sqlite3_exec()例程返回SQLITE_ABORT,而不再次调用回调,也不运行任何后续SQL语句。

sqlite3_exec()回调函数的第二个参数是结果中的列数。sqlite3_exec()回调函数的第三个参数是一个指向字符串的指针数组,就像从sqlite3_column_text()中获得的一样,每个列一个。如果结果行的一个元素为NULL,那么sqlite3_exec()回调的对应字符串指针就是NULL指针。sqlite3_exec()回调函数的第四个参数是一个指向字符串的指针数组,其中每个条目表示从sqlite3_column_name()获得的相应结果列的名称。

如果sqlite3_exec()的第二个参数是一个NULL指针,一个指向空字符串的指针,或者一个只包含空格和/或SQL注释的指针,那么SQL语句不会被评估,数据库也不会被改变。


限制:

  • 应用程序必须确保sqlite3_exec()的第一个参数是一个有效且打开的数据库连接。
  • 当sqlite3_exec()正在运行时,应用程序不能关闭由第一个参数指定的数据库连接。
  • 当sqlite3_exec()运行时,应用程序不能修改传递给sqlite3_exec()第二个参数的SQL语句文本。
  • 应用程序在返回后不能取消对作为第三和第四个回调参数传递的数组或字符串指针的引用。