gpt4 book ai didi

c - 有没有办法系统地查询 sqlite3 行并将数据放入 C 数组中?

转载 作者:行者123 更新时间:2023-11-30 14:42:52 25 4
gpt4 key购买 nike

我正在编写一个轻量、快速的 Gtk 应用程序,该应用程序足够小,可以用于气隙独立的 Rasberry Pi 设置,供我的同事自行排类。输出将是拇指驱动器上的 CSV 文件,供我的直线经理在 Excel 中打开。就目前而言,读取和写入 .xlsx 文件对我来说可能有点太远了...... ^_~

用于永久存储的Sqlite数据库。

我需要知道是否有一个函数使我能够系统地查询行以将数据复制到数组(也可能是结构)中,以便在 C 中进行分析(名册冲突等)。我读到 Java 有游标,C 中的游标是什么?

最佳答案

I need to know if there's a function enabling me to systematically query the rows to copy the data into arrays (maybe structs too) for analysis in C

没有函数可以将整个数组或结构与 SQLite 的 C API 中的 SQLite 行关联起来。 。您将需要使用 sqlite3_column_xxx() 检索结构或数组的每个元素。 (例如,sqlite3_column_int() 用于检索整数值)。

例如,假设您有一个如下所示的struct:

typedef struct {
int employee_id;
int day_of_month;
int shift_no;
} roster_entry_t;

以及具有匹配架构的 SQLite 表,您将使用如下函数检索这些结构的数组:

int get_roster_entries(sqlite3 *db, roster_entry_t *roster, int max,
int *count) {
sqlite3_stmt *stmt = NULL;
int rc = 0;
int i = 0;

rc = sqlite3_prepare_v2(
db, "SELECT employee_id, day_of_month, shift_no FROM roster LIMIT ?",
-1, &stmt, NULL);
if (rc != SQLITE_OK) {
fprintf(stderr, "Failed to prepare SQL: %s\n", sqlite3_errmsg(db));
return 1;
}
rc = sqlite3_bind_int(stmt, 1, max);
if (rc != SQLITE_OK) {
fprintf(stderr, "Problem setting limit: %s\n", sqlite3_errmsg(db));
return 1;
}

do {
roster_entry_t *entry = &roster[i++];
rc = sqlite3_step(stmt);
if (rc == SQLITE_DONE) {
printf("No more rows ...\n");
break;
} else if (rc != SQLITE_ROW) {
fprintf(stderr, "Problem: %s\n", sqlite3_errmsg(db));
sqlite3_finalize(stmt);
return 1;
}
entry->employee_id = sqlite3_column_int(stmt, 0);
entry->day_of_month = sqlite3_column_int(stmt, 1);
entry->shift_no = sqlite3_column_int(stmt, 2);
} while (i < max);
*count = i - 1;

sqlite3_finalize(stmt);
return 0;
}

注释

  • 程序中的变量可以使用 sqlite3_bind_xxx() 与 SQL 中的占位符相关联。 .
  • 尽管它使代码变得更加冗长,但检查 SQLite 函数的返回值确实值得。
  • sqlite3_bind_xxx() 的数组索引从 1 开始,而 sqlite3_column_xxx() 的数组索引从 0 开始(有点令人困惑)。

关于c - 有没有办法系统地查询 sqlite3 行并将数据放入 C 数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54288408/

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