C语言结构体数组变量插入mysql数据库的语句怎么写?
我的代码如下://定义一个数据结构数组structst_data{unsigneda1;unsigneda2;unsigneda3;}st[100];floatv1,v2...
我的代码如下:
//定义一个数据结构数组
struct st_data
{
unsigned a1;
unsigned a2 ;
unsigned a3;
}st[100];
float v1,v2,v3;
int i;
char i_query[242];
for(i=0; fread(&st[i],sizeof(struct st_data),1,fp)!=0; ++i)
{
v1 = consv(t[i].a1);//consv 是一个处理数据计算的自定义函数
v2 = consv(st[i].a2);
v3= consv(st[i].a3);
printf("%15.2f%15.2f%15.2f",v1,v2,v3);
fprintf(i_query, "INSERT INTO stock_data
values(%.2f,%.2f,%.2f)",v1,v2,v3);
if ( mysql_query(&mysql, i_query) != 0 )
//如果连接成功,则开始插入
{
fprintf(stderr, "插入失败!\n");
exit(1);
}
else
{
printf("数据插入成功!");
}
}
以上语句中,printf("%15.2f%15.2f%15.2f",v1,v2,v3);执行了循环,读出了二进制文件里面所有数据
但是fprintf(i_query,
"INSERT INTO stock_data
values(%.2f,%.2f,%.2f)",v1,v2,v3);这一句却只插入一次,也就是i=0的那一句。
我想知道为什么会这样?能告诉我破解之法吗?
自己看书,把这个问题解决了,其实呢,不是因为别的原因,是我自己太粗心了,( mysql_query(&mysql, i_query) != 0 )这句在我的程序里写在FOR循环外面了。
所以永远都是只插入最后一条数据。其实这给我一个教训,自己粗心,浪费大量时间
让我又把数据类型重新定义了一遍。
求人不如求自己。自己才是最可靠的!
永远不要靠别人编程! 展开
//定义一个数据结构数组
struct st_data
{
unsigned a1;
unsigned a2 ;
unsigned a3;
}st[100];
float v1,v2,v3;
int i;
char i_query[242];
for(i=0; fread(&st[i],sizeof(struct st_data),1,fp)!=0; ++i)
{
v1 = consv(t[i].a1);//consv 是一个处理数据计算的自定义函数
v2 = consv(st[i].a2);
v3= consv(st[i].a3);
printf("%15.2f%15.2f%15.2f",v1,v2,v3);
fprintf(i_query, "INSERT INTO stock_data
values(%.2f,%.2f,%.2f)",v1,v2,v3);
if ( mysql_query(&mysql, i_query) != 0 )
//如果连接成功,则开始插入
{
fprintf(stderr, "插入失败!\n");
exit(1);
}
else
{
printf("数据插入成功!");
}
}
以上语句中,printf("%15.2f%15.2f%15.2f",v1,v2,v3);执行了循环,读出了二进制文件里面所有数据
但是fprintf(i_query,
"INSERT INTO stock_data
values(%.2f,%.2f,%.2f)",v1,v2,v3);这一句却只插入一次,也就是i=0的那一句。
我想知道为什么会这样?能告诉我破解之法吗?
自己看书,把这个问题解决了,其实呢,不是因为别的原因,是我自己太粗心了,( mysql_query(&mysql, i_query) != 0 )这句在我的程序里写在FOR循环外面了。
所以永远都是只插入最后一条数据。其实这给我一个教训,自己粗心,浪费大量时间
让我又把数据类型重新定义了一遍。
求人不如求自己。自己才是最可靠的!
永远不要靠别人编程! 展开
1个回答
展开全部
你的i_query是生成SQL文本文件吗,反复调用fprintf(i_query, "INSERT INTO stock_data values(%.2f,%.2f,%.2f)",v1,v2,v3);可以在文件中生成多行INSERT INTO语句,可以插入多行,但是你多个SQL语句之间应该有分号,你的这个语句可以修改如下:
fprintf(i_query, "INSERT INTO stock_data values(%.2f,%.2f,%.2f);\n",v1,v2,v3);
fprintf(i_query, "INSERT INTO stock_data values(%.2f,%.2f,%.2f);\n",v1,v2,v3);
追问
我刚试过了,结果还是只插入一条,而且是数据的最后一条记录。
非常感谢你的回答,我可以加你Q 吗?
我可以把我写的源代码给你分析一下,你看可以吗?
i_query是保存格式化后的SQL语句字符串的字符数组。
我就希望,能够把所有记录都循环插入到数据库。
这个问题折腾了我好几天、帮帮我吧
追答
如果是成功最后一条,那么是不是你每次fprintf之前都fopen以覆盖方式打开文件呢
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |