【发布时间】:2015-02-04 13:48:41
【问题描述】:
我正在努力实现一些非常基本的目标。但不幸的是,我无法得到预期的结果。
我有一个名为 emp_info的 sqlite 表,在以下字段中有 9 条员工记录:
SR_NO[0]、NAME[1]、AGE[2]、SEX[3]、ADDRESS[4]、EMPID[5]、CARDID[6] 和 SALARY[7]。
要根据 sql 查询访问表并获取员工记录,我在 C 中有以下程序:
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
#include <string.h>
static int callback(void *param, int argc, char *argv[], char **azColName){
int i=0;
if(argc == 0) return 0;
char **res = (char **)param;
*res = (char *)realloc(*res, sizeof(*res));
//for(i=0; i<argc; i++){
//printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
strcpy(*res, argv[1], sizeof(*res));
printf("%s\n", *res);
// }
return 0;
}
int main(int argc, char* argv[])
{
sqlite3 *db;
char *zErrMsg = 0;
int rc;
char *sql;
char *param;
rc = sqlite3_open("/DBsqlite3/foreign_key.db", &db);
if( rc )
{
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
exit(0);
}
else
{
fprintf(stderr, "\nOpened database successfully\n\n");
}
sql="select * from emp_info;"
rc = sqlite3_exec(db, sql, callback, ¶m, &zErrMsg);
if( rc != SQLITE_OK )
{
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
else
{
fprintf(stdout, "Operation done successfully\n\n");
printf("the value of data is %s \n\n", param);
}
free(param);
sqlite3_close(db);
return 0;
}
输出如下: ` 成功打开数据库
AAA
BBB
CCC
DDD
EEE
FFF
GGG
HHH
III
Operation done successfully
the value of data is III
我希望所有的 AAA、BBB、CCC、.... 都将存储在 param 中并被打印出来。但这并没有发生。 param 只取最后一条记录。
为什么会这样?我怀疑 strcpy() 造成了问题。
请帮忙。
除此之外,我真正的目标是让所有有效的员工记录(根据 sql 查询)存储在 param 中,它应该显示所有字段(SR_NO[0]、NAME [1]、年龄[2]、性别[3]、地址[4]、EMPID[5]、CARDID[6] 和 SALARY[7])。例如,如果我向 sql
提供以下查询sql="SELECT * FROM emp_info WHERE AGE>40";
那么 param 应该显示如下结果
7 GGG 41 MALE G1G2G3G4 307 7777GGG 77777
8 HHH 42 FEMALE H1H2H3H4 308 8888HHH 88888
9 III 43 FEMALE I1I2I3I4 309 9999IIII 99999
而不仅仅是一个专栏。我怎样才能做到这一点?
提前谢谢你。
【问题讨论】:
-
请修正您的代码缩进。读起来很痛苦。
-
您希望将结果存储在什么数据结构中? (你为什么使用 C 语言?)
-
@CL。我很高兴你注意到了这个问题。我实际上正在遵循您的建议 [stackoverflow.com/questions/12984248/… 和 [stackoverflow.com/questions/14437433/… 我想在 C++ 中完成此操作。 .请点击链接到我的实际问题 [stackoverflow.com/questions/28213103/…
-
@TimČas 我为缩进道歉。我是新来的。我会修好它。谢谢