gpt4 book ai didi

c - SQLite C API 如何将查询输出保存到字符串

转载 作者:行者123 更新时间:2023-12-02 17:58:39 24 4
gpt4 key购买 nike

函数 showGenres 运行一个选择查询,将 SQL 表类型的内容打印到控制台。我想将 SELECT * FROMgenres 查询的结果保存到我的 char GenresDisplay[1000] 变量中。

我尝试使用 strcat 将 sqlite3_column_text(statement, 0) 连接到变量,然后打印该变量,但这不起作用。我也尝试过执行 sprintf() 但这也不起作用。

void showGenres()
{
int genre_count = 0;
char genresDisplay[100000];
char genreID[1000], genreName[1000], genreDescription[1000];

rc = sqlite3_open("topmusic.db", &database);
if (rc)
printf("Error opening database. \n");
else
printf("Database opened successfully. \n");
asprintf(&query, "SELECT * FROM genres;");
printf("The following SQL Query will run: '%s'\n", query);
if (sqlite3_prepare_v2(database, query, strlen(query), &statement, NULL) != SQLITE_OK)
{
sqlite3_close(database);
printf("Can't retrieve data: %s\n", sqlite3_errmsg(database));
}
printf("%16s | %32s | %48s\n", "ID", "Genre", "Description");
while (sqlite3_step(statement) == SQLITE_ROW)
{
printf("%16s | %32s | %48s\n",
sqlite3_column_text(statement, 0),
sqlite3_column_text(statement, 1),
sqlite3_column_text(statement, 2));
genre_count++;
}
printf("Number of genres: %d\n", genre_count);
sqlite3_finalize(statement);
free(query);
sqlite3_close(database);
}

该函数将以下内容打印到控制台:

Database opened successfully. 
The following SQL Query will run: 'SELECT * FROM genres;'
ID | Genre | Description
1 | pop | (null)
2 | rock | (null)
3 | blues | (null)
4 | classical | (null)
5 | dance | (null)
6 | hard rock |
7 | metal | No description
8 | heavy metal | a description
9 | test | No description
10 | pop rock | No description
11 | exit | No description
12 | test2 | No description
13 | test3 | No description
14 | test4 | No description
15 | asdasdasd | No description
Number of genres: 15

如何将此输出保存到变量?

最佳答案

与其拥有一个巨大的数组并希望在调用函数时不会导致堆栈溢出(或者最终不够大的小数组),不如分配您正在使用的内存使用 malloc() 动态地使用,并使用 realloc() 根据需要进行增长,以便能够保存所有结果。但这是乏味且容易出错的。幸运的是,Sqlite 提供了some functions为您管理动态增长的字符串缓冲区。

使用该 API,您的代码可能如下所示

...
sqlite3_str *buffer = sqlite3_str_new(database);
while (sqlite3_step(statement) == SQLITE_ROW)
{
sqlite3_str_appendf(buffer, "%16s | %32s | %48s\n",
(const char *)sqlite3_column_text(statement, 0),
(const char *)sqlite3_column_text(statement, 1),
(const char *)sqlite3_column_text(statement, 2));
genre_count++;
}
// Don't forget to free genreDisplay with sqlite3_free() when done.
char *genreDisplay = sqlite3_str_finish(buffer);
...

关于c - SQLite C API 如何将查询输出保存到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59254317/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com