文档首页
MySQL 8.4 C API 开发者指南
下载本手册
PDF (US Ltr) - 1.4Mb
PDF (A4) - 1.4Mb


MySQL 8.4 C API 开发者指南  /  ...  /  mysql_set_local_infile_handler()

5.4.78 mysql_set_local_infile_handler()

void
mysql_set_local_infile_handler(MYSQL *mysql,
  int (*local_infile_init)(void **, const char *, void *),
  int (*local_infile_read)(void *, char *, unsigned int),
  void (*local_infile_end)(void *),
  int (*local_infile_error)(void *, char*, unsigned int),
  void *userdata);

说明

此函数安装在执行 LOAD DATA LOCAL 语句期间使用的回调函数。它使应用程序能够控制本地(客户端)数据文件的读取。参数是连接句柄、一组指向回调函数的指针,以及一个指向数据区域的指针,回调函数可以使用该指针共享信息。

要使用 mysql_set_local_infile_handler(),您必须编写以下回调函数

int
local_infile_init(void **ptr, const char *filename, void *userdata);

初始化函数。此函数被调用一次,以执行任何必要的设置,打开数据文件,分配数据结构等等。第一个 void** 参数是指向指针的指针。您可以将指针(即 *ptr)设置为一个值,该值将被传递给其他每个回调函数(作为 void*)。回调函数可以使用这个指向的值来维护状态信息。 userdata 参数与传递给 mysql_set_local_infile_handler() 的值相同。

使初始化函数在成功时返回零,在出错时返回非零值。

int
local_infile_read(void *ptr, char *buf, unsigned int buf_len);

数据读取函数。此函数被重复调用以读取数据文件。 buf 指向存储读取数据的缓冲区, buf_len 是回调函数可以读取并存储在缓冲区中的最大字节数。(它可以读取更少的字节,但不应读取更多字节。)

返回值是读取的字节数,当没有更多数据可读取时返回零(这表示 EOF)。如果发生错误,则返回小于零的值。

void
local_infile_end(void *ptr)

终止函数。此函数在 local_infile_read() 返回零(EOF)或错误后调用一次。在此函数中,释放由 local_infile_init() 分配的任何内存,并执行任何其他必要的清理工作。即使初始化函数返回错误,也会调用它。

int
local_infile_error(void *ptr,
                   char *error_msg,
                   unsigned int error_msg_len);

错误处理函数。此函数用于获取文本错误消息,以便在您的其他任何函数返回错误时返回给用户。 error_msg 指向写入消息的缓冲区, error_msg_len 是缓冲区的长度。将消息写为以 null 结尾的字符串,长度最多为 error_msg_len−1 个字节。

返回值是错误号。

通常,其他回调函数将错误消息存储在 ptr 指向的数据结构中,以便 local_infile_error() 可以将消息从那里复制到 error_msg 中。

在您的 C 代码中调用 mysql_set_local_infile_handler() 并传递指向回调函数的指针后,您可以发出 LOAD DATA LOCAL 语句(例如,通过使用 mysql_real_query()mysql_query())。客户端库会自动调用您的回调函数。 LOAD DATA LOCAL 中指定的文件名将作为第二个参数传递给 local_infile_init() 回调函数。

返回值

无。

错误

无。