C sqlite3将结果添加到struct中的动态数组

时间:2015-03-15 23:21:45

标签: c arrays dynamic sqlite

在我找到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泄漏。有没有人有任何建议如何实现这一目标?

0 个答案:

没有答案