Home  >  Article  >  Database  >  Linux下C语言连接MySQL_MySQL

Linux下C语言连接MySQL_MySQL

WBOY
WBOYOriginal
2016-06-01 13:26:351166browse

bitsCN.com

首先保证安装:

1:安装MySQL:sudo apt-get install mysql-server mysql-client 2:安装MySQL开发包:sudo apt-get install libmysqlclient15-dev 此时需要用到的头文件会出现在/usr/include/mysql/里

C语言连接MySQL数据库

此包含两个步骤: 1. 使用函数mysql_init初始化一个连接句柄结构. mysql_init的函数定义如下:
MYSQL * mysql_init(MYSQL *);
通常传递NULL给这个例程,他会返回一个指向新分配的连接句柄结构的指针。如果传递一个已有的结构,它将会重新初始化。这个例程在出错时返回NULL.

2. 实际进行连接 目前只是分配和初始化了一个结构,仍然需要使用mysql_real_connect来向一个连接提供参数,
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安装的默认设置。他们将默认使用合适的值。

最后,flags参数用来对一些定义的位模式进行OR操作,使得改变使用协议的某些特性。

如果无法连接,则返回NULL。mysql_error函数可以提供有帮助的信息。

3. 使用完连接,通常在程序退出前,要调用函数mysql_close;

mysql_close的函数定义:

void mysql_close(MYSQL *connection);
将关闭连接。

连接MySQL的示例:
#include <stdio.h>#include <stdlib.h>#include "mysql.h"int main (int argc, char *argv[]) {	MYSQL *conn;	// 步骤1: 初始化连接句柄	conn = mysql_init(NULL);	if (conn == NULL) { // 如果返回NULl说明初始化失败		printf("mysql_init failed!/n");			return EXIT_FAILURE;	}	// 步骤2:实际进行连接	// 参数分别为,conn连接句柄,host是MySQL所在主机或地址,user用户名,password密码,database_name数据库名,后面的都是默认	conn = mysql_real_connect(conn, "host", "user", "password", "database_name", 0, NULL, 0);	if (conn) { // 连接成功		printf("Connection success!/n");		} else {		printf("Connection failed!/n");		}	// 步骤3: 退出前关闭连接	mysql_close(conn);	return 0;}

编译和运行:
gcc -I/usr/include/mysql test.c -L/usr/lib/mysql -lmysqlclient -o app
/

错误处理

错误处理的两个函数:

// 返回错误码unsigned int mysql_errno(MYSQL *connection);// 返回错误详细信息char* mysql_error(MYSQL *connection);
注意,当调用conn = mysql_real_connect(...), 时会遇到一个问题,因为它在失败时返回NULL指针,并没有提供一个错误码。但如果是将句柄作为一个变量,那么即使mysql_real_connect失败,也仍然能够处理它。
#include <stdio.h>#include <stdlib.h>#include "mysql.h"#include "errmsg.h"#include "mysqld_error.h"void Error(MYSQL* conn) {	printf("Connection error %d: %s/n", mysql_errno(conn), mysql_error(conn));}int main (int argc, char *argv[]) {	MYSQL conn; // 是变量而不是指针	mysql_init(&conn); // 注意取地址符&	if (mysql_real_connect(&conn, "192.168.137.246", "root", "123456", "test", 0, NULL, 0)) {		printf("Connection success!/n");		mysql_close(&conn);	} else {		fprintf(stderr, "Connection failed!/n");		if (mysql_errno(&conn)) {			fprintf(stderr, "Connection error %d: %s/n", mysql_errno(&conn), mysql_error(&conn));		}	}	return EXIT_SUCCESS;}
bitsCN.com
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn