69.笔记 MySQL学习——C编写MySQL程序二连接服务器

时间:2021-08-20 00:01:12

69.笔记 MySQL学习——C编写MySQL程序二连接服务器

实现连接MySQL服务器、断开连接和退出。

代码如下:

#include <my_global.h>

#include <my_sys.h>

#include <mysql.h>

static char *opt_host_name = NULL;    /* server host (default=localhost) */

static char *opt_user_name = NULL;    /* username (default=login name) */

static char *opt_password = NULL;     /* password (default=none) */

static unsigned int opt_port_num = 0; /* port number(use built-in value) */

static char *opt_socket_name = NULL;  /* socket name (use built-in value) */

static char *opt_db_name = NULL;      /* database name (default=none) */

static unsigned int opt_flags = 0;    /* connection flags (none) */

static MYSQL *conn;                   /* pointer to connectionhandler */

int

main (int argc, char *argv[])

{

  MY_INIT (argv[0]);

  /* initializeclient library */

  if(mysql_library_init (0, NULL, NULL))

  {

    fprintf(stderr, "mysql_library_init() failed\n");

    exit (1);

  }

  /* initializeconnection handler */

  conn =mysql_init (NULL);

  if (conn ==NULL)

  {

    fprintf(stderr, "mysql_init() failed (probably out of memory)\n");

    exit (1);

  }

  /* connect toserver */

  if(mysql_real_connect (conn, opt_host_name, opt_user_name, opt_password,

     opt_db_name, opt_port_num, opt_socket_name, opt_flags) == NULL)

  {

    fprintf(stderr, "mysql_real_connect() failed\n");

    mysql_close(conn);

    exit (1);

  }

  /* disconnectfrom server, terminate client library */

  mysql_close(conn);

 mysql_library_end ();

  exit (0);

}

进行编译

# gcc `mysql_config --include``mysql_config --libs` connect1.c

代码说明

其中函数mysql_init函数获得一个连接处理器

函数mysql_real_connect函数,建立与服务器的连接,有很多参数:指向连接处理器的指针,服务器主机,使用MYSQL账户的用户名和密码,数据库名称指定的数据库将是链接建立之后的默认数据库,端口号,套接字文件名,标志值。

           终止连接使用mysql_close函数。

           MY_INIT()是一个初始化宏,把一个全局变量设置成程序名

           Mysql_library_init会初始化客户端开发库,在调用其他mysql_xxx函数之前调用它。

           Mysql_library_end会终止使用客户端开发库,并执行一些必要的清理工作。

注意

代码中包含硬编码值,会暴露密码。虽然编译成了二进制可执行文件,但是通过执行strings工具可以查看到密码。

测试

直接执行,如果数据库没开,则报错如下:

# ./a.out

mysql_real_connect() failed

如果没有任何输出,则表明连接成功。