在我找到this之前,我已经查看是否已经问过这个问题,但这似乎不是同一个问题。这让我很难过。 将数据从SQL结果传递到存储在结构中的动态数组有什么好方法?
假设我有一个名为foo的结构;我的目标是用SQL数据库填充**bar1
,用字符串填充**bar2
。
typedef struct {
int len; // Number of rows in the table
int **bar1;
char **bar2;
} foo;
我使用行数初始化数组,所以当我选择bar1[1]
和bar2[1]
时,我从表中的第二行获取数据(因为数组从[0]开始)。
foo* init_foo(int *len) {
foo *f = malloc(sizeof(foo)); // I only need one foo for data
f->bar1 = malloc(sizeof(int*)*len); // len = num of rows returned
f->bar2 = malloc(sizeof(char*)*len);
return f;
}
我运行SELECT (*) FROM TABLE
查询以获取数据并将其存储在指针
int *bar2tmp = malloc(sizeof(int*));
bar2tmp = (int*)(intptr_t)sqlite3_column_int(stmt, 0);
char *bar2tmp = (char*)malloc(sizeof(char*));
bar2tmp = (char*)sqlite3_column_text(stmt, 1);
我每次都循环上面的运行sqlite3_step
,直到我得到SQLITE_DONE
并且每个循环使用执行以下操作的函数将结果添加到数组
for(i = 0; i < len; i++) {
foo->bar1[i] = bar1tmp;
foo->bar2[i] = bar2tmp;
}
然后,当我完成数据后,我可以使用
for(i = 0; i < len; i++) {
free(foo->bar1[i]);
free(foo->bar2[i]);
}
我在练习中尝试过这种方法,没有任何喜悦和许多valgrind泄漏。有没有人有任何建议如何实现这一目标?