gpt4 book ai didi

MySQL C API : Need example for initiating DB on *Embedded* mode

转载 作者:太空宇宙 更新时间:2023-11-04 08:39:16 26 4
gpt4 key购买 nike

我在使用 C 工具,我需要在其中大量操作和查询进程内部数据。

因此,我决定在嵌入式模式下使用MySQL C API,这样我的工具的每个运行进程都可以拥有一个嵌入式数据库,并使用它的所有 SQL 功能。

我在网上找到的所有 MySQL C API 教程都涉及连接到正在运行的服务器,但我不是这样。

Oracle 的MySQL 网站上有一些使用Embedded 模式的例子,但是并不简单,而且很难实现。

问:有人可以指点我或给我写一个在嵌入式模式下使用MySQL C API启动数据库的简短示例吗?

谢谢!

最佳答案

经过多次尝试,终于自己回答并分享给大家:

  • 创建一个用于存储数据库的中央数据目录。在此示例中,我将使用 /tmp/mysql_embedded_data

> mkdir/tmp/mysql_embedded_data

  • 创建一个 C 文件,如下例所示:
#include <my_global.h>
#include <mysql.h>

int main(int argc, char **argv) {
static char *server_options[] = {
"mysql_test", // An unused string
"--datadir=/tmp/mysql_embedded_data", // Your data dir
NULL };
int num_elements = (sizeof(server_options) / sizeof(char *)) - 1;

static char *server_groups[] = { "libmysqld_server",
"libmysqld_client", NULL };


// Init MySQL lib and connection
mysql_library_init(num_elements, server_options, server_groups);
MYSQL *con = mysql_init(NULL);

if (con == NULL) {
fprintf(stderr, "%s\n", mysql_error(con));
exit(1);
}

mysql_options(con, MYSQL_READ_DEFAULT_GROUP, "libmysqld_client");
mysql_options(con, MYSQL_OPT_USE_EMBEDDED_CONNECTION, NULL);

// Connect to no host/port -> Embedded mode
if (mysql_real_connect(con, NULL, NULL, NULL, NULL, 0, NULL, 0) == NULL) {
fprintf(stderr, "%s\n", mysql_error(con));
mysql_close(con);
exit(1);
}

// Create a sample empty DB, named "aNewDatabase"
if (mysql_query(con, "CREATE DATABASE aNewDatabase")) {
fprintf(stderr, "%s\n", mysql_error(con));
mysql_close(con);
exit(1);
}

// Close connection
mysql_close(con);
exit(0);
}
  • 编译你的文件(我假设在这个例子中我的 C 文件名为 /tmp/mysql_try.c)

gcc/tmp/mysql_try.c -o/tmp/mysql_try -lz `mysql_config --include --libmysqld-libs`

  • 运行编译好的程序:

>/tmp/mysql_try

  • 当您的程序返回时,确保数据库创建成功。我们将示例数据库命名为 aNewDatabase,因此我们将检查它现在是否在我们创建的数据目录中有一个目录 -> 我们将检查目录 /tmp/mysql_embedded_data/aNewDatabase 已创建:

> ls/tmp/mysql_embedded_data/aNewDatabase
db.opt

  • 尽情享受吧!

关于MySQL C API : Need example for initiating DB on *Embedded* mode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24533685/

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