使用C语言访问MySQL(第八章)

8.3 使用C语言访问MySQL数据Windows本地程序(如Access)可以通过ODBC驱动程序来访问MySQL,甚至有针对linuxODBC驱动程序。下面讨论使用C语言来访问MySQL.8.3.1 连接例程用C语言连接MySQL数据库包含两个步骤:1.初始化一个连接句柄结构2.实际进行连接首先,使用mysql_init来初始化连接句柄:#include <mysql.h>MYSQL *mysql_init(MYSQL *);通常传递NULL给这个例程,它会返回一个指向新分配的连接句柄结构的指针。如果传递一个已有的结构,它将被重新初始化。这个例程出错时返回NULL。目前为止,只是分配和初始化了一个结构,仍然需要使用mysql_real_connect来向一个连接提供参数:MYSQL *mysql_real_connect(MYSQL *connection, const char *server_host, const char *sql_user_name, const char *sql_password, const char *db_name, unsigned int port_number, const char *unix_socket_name, unsigned int flags);指针connection必须指向已经被mysql_init初始化过的结构。其他参数的含义相当明了,server_host既可以是主机名,也可以是IP地址。如果只是连接到本地机器,可以通过指定localhost来优化连接类型。sql_user_name和sql_password的含义和它们的字面含义一样。如果登录名为NULL,则假设登录名为当前linux用户的登录ID。如果密码是NULL,则只能访问服务器上无需密码就可访问的数据。密码会在通过传输前进行加密。port_number和unix_socket_name应该分别为0和NULL,除非改变了MYSQL安装的默认设置。flag参数用来对一些定义的位模式进行OR操作,使得改变使用协议的某些特征。如果无法连接,它将返回NULL。mysql_error函数可以提供有帮助的信息。使用完连接之后,通常在程序退出时,要像下面这样调用函数mysql_close:void mysql_close(MYSQL *connection);这将关闭连接,如果连接是由mysql_init建立的,MySQL结构会被释放。指针将会无效并无法再次使用。mysql_options例程(仅能在mysql_init和mysql_real_connect之间调用)可以设置一些选项:int mysql_options(MYSQL *connection, enum option_to_set, const char *argument);因为mysql_options一次只能设置一个选项,所以每设置一个选项就要调用它一次。下面列出了3个最常用的选项:enum选项 实际参数类型 说明MySQL_OPT_CONNECT_TIMEOUT const unsigned int * 连接超时之前的等待秒数MySQL_OPT_COMPRESS None,使用NULL 网络连接中使用压缩机制MySQL_INIT_COMMAND const char * 每次连接建立后发送的命令如果要设置连接超时时间为7秒,使用的代码片段如下所示:unsigned int timeout = 7;connection = mysql_init(NULL);ret = mysql_options(connection, MYSQL_OPT_CONNECT_TIMEOUT, (const char *)&timeout);if (ret){}connection = mysql_real_connect(connection…)接下来使用一个简短的程序测试一下。首先进入rick用户,创建一个数据库foo;mysql -u rick -pCREATE DATABASE foo;如果直接在mysql命令行中输入许多创建表和添加数据的命令,这比较容易出错,而且如果再次输入这些命令的话,,也很不高效。因此,创建一个包含所需要命令的文件。这个文件名为create_children.sql;\. /绝对路径/create_children.sql 来执行这个文件一定要使用create_children.sql的绝对路径.现在有一个用户,一个数据库和一个保存了一些数据的表,接下来看一下如果通过代码来访问这些数据。编写程序connect1.c,它以用户名rick和密码secret来连接本机服务器上名为foo的数据库。如果出现mysql.h找不到的情况,参见linux找不到mysql.h.编译这个程序需要同时添加include路径和库文件路径,以及指定链接的库模块mysqlclient.$ gcc connect1.c -o connect1.exe -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient-I/usr/include/mysql是mysql.h的头文件路径-L/usr/lib/mysql是库文件路径8.3.2 错误处理MySQL使用一系列由连接句柄结构报告的返回码.两个必备的例程是:unsigned int mysql_errno(MYSQL *connection);char *mysql_error(MYSQL *connection);可以通过调用mysql_errno并传递连接结构来获得错误码,它通常都是非0值.如果未设定错误码,它将返回0.mysql_errno的返回值实际上就是错误码,它们在errmsg.h或者mysqld_error.h中定义,前者是报告客户端错误,后者关注服务端错误.mysql_error提供有意义的文本信息,而不是单调的错误码,这些信息被写入一些内部静态内存空间中,如果想保存错误文本,需要把它复制到别的地方.当调用mysql_real_connect时会遇到一个问题,因为它在失败时返回NULL指针,并没有提供一个错误码.但如果将连接句柄作为一个变量,那么及时mysql_real_connect失败,仍然能够处理它.编写程序connect2.c,它示例如何使用非动态分配的连接结构,以及如何编写一些基本的错误处理代码.

有事者,事竟成;破釜沉舟,百二秦关终归楚;苦心人,

使用C语言访问MySQL(第八章)

相关文章:

你感兴趣的文章:

标签云: