Ubuntu中在C编程中mysql结果集怎么打印输出多行,每次输出只能输出一行
该回答引用ChatGPT
在 Ubuntu 中,如果您想在 C 编程中打印多行 mysql 结果集,可以使用 MySQL C API 中的 mysql_fetch_row 函数。该函数用于按行检索结果集中的行,并将其存储在 MYSQL_ROW 结构中。
#include <mysql.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
char *server = "localhost";
char *user = "username";
char *password = "password";
char *database = "database_name";
conn = mysql_init(NULL);
if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}
if (mysql_query(conn, "SELECT * FROM table_name")) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}
res = mysql_use_result(conn);
while ((row = mysql_fetch_row(res)) != NULL) {
printf("%s\t%s\t%s\n", row[0], row[1], row[2]); //修改此处输出
}
mysql_free_result(res);
mysql_close(conn);
return 0;
}
以下答案引用自GPT-3大模型,请合理使用:
Adopt代码如下:
#include <stdio.h>
#include <mysql.h>
int main(int argc, char **argv)
{
MYSQL *conn;
int res;
MYSQL_RES *result;
MYSQL_ROW row;
conn = mysql_init(NULL);
/* Connect to database */
if (!mysql_real_connect(conn, "localhost", "root", "password", "database", 0, NULL, 0))
{
printf("Error: %s [%d]\n", mysql_error(conn), mysql_errno(conn));
return -1;
}
/* send SQL query */
res = mysql_query(conn, "SELECT * FROM tablename");
if (res)
{
printf("Error: %s [%d]\n", mysql_error(conn), mysql_errno(conn));
return -2;
}
/* output results*/
result = mysql_use_result(conn);
while ((row = mysql_fetch_row(result)) != NULL)
{
printf("%s\t%s\t%s\n", row[0], row[1], row[2]);
}
mysql_free_result(result);
/* close connection */
mysql_close(conn);
return 0;
}
如果我的回答解决了您的问题,请采纳我的回答
你说,mysql_fetch_row只能输出一行结果 ,那么可能是因为您只调用了一次该函数。为了输出结果集中的多行数据,您需要在循环中多次调用mysql_fetch_row函数,直到它返回NULL为止。
以下是一个基本的示例代码来连接MySQL并执行SQL查询,然后打印输出结果集中的所有行:
#include <stdio.h>
#include <mysql/mysql.h>
int main() {
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
char *server = "localhost";
char *user = "root";
char *password = "yourpassword";
char *database = "yourdatabase";
conn = mysql_init(NULL);
if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) {
fprintf(stderr, "%s\n", mysql_error(conn));
return 1;
}
if (mysql_query(conn, "SELECT * FROM yourtable")) {
fprintf(stderr, "%s\n", mysql_error(conn));
return 1;
}
res = mysql_use_result(conn);
while ((row = mysql_fetch_row(res)) != NULL) {
for (int i = 0; i < mysql_num_fields(res); i++) {
printf("%s ", row[i]);
}
printf("\n");
}
mysql_free_result(res);
mysql_close(conn);
return 0;
}
在上面的代码中,while循环中多次调用mysql_fetch_row函数,直到它返回NULL为止。每次循环都会输出结果集中的一行数据。
请注意,此示例代码假设查询结果集中只包含文本数据,因此将每个字段作为字符串输出。如果您的结果集中包含其他类型的数据,如日期、时间或二进制数据,则需要根据数据类型进行相应的转换。
不知道你这个问题是否已经解决, 如果还没有解决的话: