在C语言中连接数据库通常通过调用数据库提供的API来实现,比如MySQL的C API。以下是一个使用MySQL C API连接数据库并获取数据的示例。
前提条件
- 安装MySQL服务器和客户端。
- 安装MySQL开发库,例如libmysqlclient-dev。
- 确保您的开发环境中已经安装了MySQL的头文件和库文件。
示例代码
#include <mysql/mysql.h>
#include <stdio.h>
#include <stdlib.h>
void finish_with_error(MYSQL *con) {
fprintf(stderr, "%s\n", mysql_error(con));
mysql_close(con);
exit(1);
}
int main() {
MYSQL *con = mysql_init(NULL);
if (con == NULL) {
fprintf(stderr, "mysql_init() failed\n");
exit(1);
}
if (mysql_real_connect(con, "localhost", "your_user", "your_password", "your_database", 0, NULL, 0) == NULL) {
finish_with_error(con);
}
if (mysql_query(con, "SELECT * FROM your_table")) {
finish_with_error(con);
}
MYSQL_RES *result = mysql_store_result(con);
if (result == NULL) {
finish_with_error(con);
}
int num_fields = mysql_num_fields(result);
MYSQL_ROW row;
MYSQL_FIELD *field;
while ((row = mysql_fetch_row(result))) {
for(int i = 0; i < num_fields; i++) {
if (i == 0) {
while(field = mysql_fetch_field(result)) {
printf("%s ", field->name);
}
printf("\n");
}
printf("%s ", row[i] ? row[i] : "NULL");
}
printf("\n");
}
mysql_free_result(result);
mysql_close(con);
exit(0);
}
编译和运行
在Linux系统中,可以使用以下命令编译和运行这个C程序。假设保存的文件名为mysql_example.c
:
gcc -o mysql_example mysql_example.c `mysql_config --cflags --libs`
./mysql_example
代码解释
-
包含头文件:
#include <mysql/mysql.h>
这个头文件包含了MySQL C API的所有函数和数据结构。
-
初始化MySQL连接:
MYSQL *con = mysql_init(NULL);
初始化一个MYSQL对象。
-
连接到数据库:
if (mysql_real_connect(con, "localhost", "your_user", "your_password", "your_database", 0, NULL, 0) == NULL) { finish_with_error(con); }
使用
mysql_real_connect
函数连接到数据库。参数依次为:主机名、用户名、密码、数据库名、端口号、套接字和标志。 -
执行查询:
if (mysql_query(con, "SELECT * FROM your_table")) { finish_with_error(con); }
使用
mysql_query
函数执行SQL查询。 -
存储查询结果:
MYSQL_RES *result = mysql_store_result(con);
使用
mysql_store_result
函数将查询结果存储在MYSQL_RES结构中。 -
获取并打印结果:
int num_fields = mysql_num_fields(result); MYSQL_ROW row; while ((row = mysql_fetch_row(result))) { for(int i = 0; i < num_fields; i++) { printf("%s ", row[i] ? row[i] : "NULL"); } printf("\n"); }
使用
mysql_fetch_row
函数逐行获取查询结果并打印。 -
释放结果和关闭连接:
mysql_free_result(result); mysql_close(con);
使用
mysql_free_result
函数释放结果集,并使用mysql_close
函数关闭数据库连接。
处理错误
使用finish_with_error
函数处理错误。如果发生错误,打印错误信息并关闭连接:
void finish_with_error(MYSQL *con) {
fprintf(stderr, "%s\n", mysql_error(con));
mysql_close(con);
exit(1);
}
这样就可以通过C语言连接MySQL数据库并获取数据。确保替换示例中的your_user
、your_password
、your_database
和your_table
为实际的数据库用户名、密码、数据库名和表名。