c,#include,#includeint main() {, MYSQL *conn;, MYSQL_RES *res;, MYSQL_ROW row; const char *server = "localhost";, const char *user = "root";, const char *password = "yourpassword"; /* set me first */, const char *database = "testdb"; conn = mysql_init(NULL); if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) {, fprintf(stderr, "%s,", mysql_error(conn));, return 1;, } if (mysql_query(conn, "SELECT * FROM yourtable")) {, fprintf(stderr, "%s,", mysql_error(conn));, return 1;, } res = mysql_use_result(conn); while ((row = mysql_fetch_row(res)) != NULL), printf("%s ,", row[0]); mysql_free_result(res);, mysql_close(conn); return 0;,},
`
说明:,1. **初始化和连接**:使用
mysql_init
初始化连接句柄,然后通过
mysql_real_connect
连接到数据库。,2. **执行查询**:使用
mysql_query
执行SQL查询。,3. **处理结果**:使用
mysql_use_result
获取结果集,并通过
mysql_fetch_row
逐行读取结果。,4. **清理**:释放结果集并关闭连接。 注意事项:,确保安装了MySQL开发库,并在编译时链接相应的库。使用
gcc -o test test.c $(mysql_config –cflags –libs)` 进行编译。,替换示例中的数据库连接参数(如用户名、密码、数据库名等)为实际值。
在C语言中连接MySQL数据库,通常需要经过以下几个关键步骤:
1、安装所需库:
在Linux系统中,可以使用包管理工具如apt
或yum
安装MySQL开发库,在Debian/Ubuntu系统上,可以运行sudo apt-get install libmysqlclient-dev
来安装。
在Windows系统中,可以从MySQL官方网站下载并安装MySQL Connector/C。
2、配置连接参数:
在C代码中,需要定义连接到MySQL数据库所需的参数,如主机名、用户名、密码、数据库名和端口号,以下是一个示例代码片段:
const char *server = "localhost"; const char *user = "root"; const char *password = "your_password"; const char *database = "your_database"; unsigned int port = 3306;
3、初始化连接对象:
在连接MySQL数据库之前,必须初始化一个MYSQL对象,可以使用mysql_init()
函数来完成此操作:
MYSQL *conn; conn = mysql_init(NULL); if (conn == NULL) { fprintf(stderr, "mysql_init() failedn"); return EXIT_FAILURE; }
4、建立连接:
使用mysql_real_connect()
函数来建立与MySQL数据库的连接,该函数需要传递之前配置的连接参数:
if (mysql_real_connect(conn, server, user, password, database, port, NULL, 0) == NULL) { fprintf(stderr, "mysql_real_connect() failedn"); mysql_close(conn); return EXIT_FAILURE; }
5、执行SQL查询:
连接建立后,可以使用mysql_query()
函数来执行SQL查询,以下是一个执行SELECT查询的示例:
const char *query = "SELECT * FROM your_table"; if (mysql_query(conn, query)) { fprintf(stderr, "SELECT * FROM your_table failed. Error: %sn", mysql_error(conn)); mysql_close(conn); return EXIT_FAILURE; }
6、处理查询结果:
执行查询后,使用mysql_store_result()
函数来存储结果,并使用mysql_fetch_row()
函数来逐行处理结果:
MYSQL_RES *res; MYSQL_ROW row; res = mysql_store_result(conn); if (res == NULL) { fprintf(stderr, "mysql_store_result() failed. Error: %sn", mysql_error(conn)); mysql_close(conn); return EXIT_FAILURE; } int num_fields = mysql_num_fields(res); while ((row = mysql_fetch_row(res))) { for(int i = 0; i < num_fields; i++) { printf("%s ", row[i] ? row[i] : "NULL"); } printf("n"); } mysql_free_result(res);
7、关闭连接:
完成所有操作后,使用mysql_close()
函数关闭与MySQL数据库的连接:
mysql_close(conn);
以下是两个关于C语言连接MySQL数据库的常见问题及解答:
问题一:如何在C语言中设置MySQL连接的编码格式?
解答:在建立好连接之后,如果需要获取中文字符或其他非ASCII字符集的数据,需要设置连接的编码格式,可以使用mysql_set_character_set()
函数来设置编码格式,例如设置为UTF-8:
if (mysql_set_character_set(conn, "utf8") != 0) { fprintf(stderr, "Failed to set character set to utf8. Error: %sn", mysql_error(conn)); mysql_close(conn); return EXIT_FAILURE; }
问题二:如果在连接MySQL数据库时遇到“Access denied for user”错误怎么办?
解答:这种错误通常是由于提供的用户名或密码不正确导致的,请检查代码中定义的用户名和密码是否正确,并确保该用户具有足够的权限访问指定的数据库,可以在MySQL命令行中使用以下命令为特定用户授予权限(假设用户名为user
,数据库名为database
):
GRANT ALL PRIVILEGES ON database.* TO 'user'@'localhost' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;
然后重新运行C程序进行测试。