找回密码
 立即注册
收起左侧

数据库插入数组问题

13
回复
11410
查看
[复制链接]
累计签到:4 天
连续签到:1 天
来源: 2013-12-2 15:21:17 显示全部楼层 |阅读模式
1Qter豆
  1. QSqlQuery query(db);
  2.     query.exec("create table fcFrame1(id int NOT NULL AUTO_INCREMENT,frameType unsigned char(1) not null,errorType unsigned char(1) not null,time unsigned char(6) not null,len unsigned char(4) not null, field unsigned char(4),frame unsigned VARCHAR(2048),primary key(id))");
  3.     pframe_describe frameDescrib = getTheDescribe();
  4.     query.prepare("insert into fcFrame1(frameType,errorType,time,len,field,frame) values(?,?,?,?,?,?)");
  5.     query.bindValue(0,frameDescrib->frameType);
  6.     query.bindValue(1,frameDescrib->error);
  7.     query.bindValue(2,frameDescrib->time);
  8.     query.bindValue(3,frameDescrib->len);
  9.     query.bindValue(4,frameDescrib->field);
  10.     query.bindValue(5,frameDescrib->frame);
  11.     if(!query.exec())
  12.         QMessageBox::warning(this,tr("警告"),tr("记录没有成功插人数据库"),QMessageBox::Yes);

  13. 其中frameDescrib结构体如下
  14. typedef struct _frame_describ
  15. {   unsigned char frameType;
  16.     unsigned char error;
  17.     unsigned char time[6];
  18.     unsigned char len[4];
  19.     unsigned char field[4];
  20.     unsigned char frame[2048];
  21. }frame_descirbe,*pframe_describe;
复制代码
但是这样插入数据库是有问题的。
有什么办法能将frameDescrib结构体中相应的字段插入到数据库中相应的字段。
who can help me?


最佳答案

查看完整内容

其实最简单易懂的方式是写一个循环,把数组中的字符累加到字符串中。
回复

使用道具 举报

累计签到:1568 天
连续签到:1 天
2013-12-2 15:21:18 显示全部楼层
pursue 发表于 2013-12-3 19:26
现在插入数据库遇到这样一个问题,定义 char len[4].
如果我这样转换类型unsigned int a = *(unsigned  ...

其实最简单易懂的方式是写一个循环,把数组中的字符累加到字符串中。
回复

使用道具 举报

累计签到:1568 天
连续签到:1 天
2013-12-2 16:55:10 显示全部楼层
你上面好像直接插入数组了啊?
回复

使用道具 举报

尚未签到

2013-12-2 21:47:05 显示全部楼层
同楼上,数据库好像是不能插入数组的,如果都是字符的话可以插入单个字符串,但是整型数组类似的,数据库是不支持的
回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2013-12-2 22:15:56 显示全部楼层
Joey_Chan 发表于 2013-12-2 21:47
同楼上,数据库好像是不能插入数组的,如果都是字符的话可以插入单个字符串,但是整型数组类似的,数据库是 ...

插入单个字符串是什么意思?请问有什么办法能将我那个frame_describe结构体中的数组插入数据库中吗?
回复

使用道具 举报

累计签到:114 天
连续签到:1 天
2013-12-2 22:17:13 显示全部楼层
分字母表吧  或者把数组的改成间隔符号
回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2013-12-2 22:17:50 显示全部楼层
yafeilinux 发表于 2013-12-2 16:55
你上面好像直接插入数组了啊?

yafei老师,这样插入是报错的。
回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2013-12-2 22:27:11 显示全部楼层
Marvelous 发表于 2013-12-2 22:17
分字母表吧  或者把数组的改成间隔符号

分字母表是什么意思?
回复

使用道具 举报

累计签到:1568 天
连续签到:1 天
2013-12-3 09:48:31 显示全部楼层
pursue 发表于 2013-12-2 22:17
yafei老师,这样插入是报错的。

就是把数组中的值取出来合成一个字符串,然后存储这个字符串,用的时候可以再分开。

比如数组里面是 a b c,合成一个字符串就是abc,为了便于后面识别,也可以往中间加入其他字符,比如a0b0c这样的。
回复

使用道具 举报

尚未签到

2013-12-3 10:55:07 显示全部楼层
同楼上,可以先合成一个QString,我一直都是用QString加入数据库的
回复

使用道具 举报

累计签到:114 天
连续签到:1 天
2013-12-3 11:59:31 显示全部楼层
pursue 发表于 2013-12-2 22:27
分字母表是什么意思?

打错字了 是子母表  或者改成间隔字符 就像两位大神说的那样
回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2013-12-3 19:26:29 显示全部楼层
yafeilinux 发表于 2013-12-3 09:48
就是把数组中的值取出来合成一个字符串,然后存储这个字符串,用的时候可以再分开。

比如数组里面是 a b  ...

现在插入数据库遇到这样一个问题,定义 char len[4].
如果我这样转换类型unsigned int a = *(unsigned int *)(len),这样得到的变量a是否就是len[0],len[1],len[2],len[3]这四个字节组成unsigned int型变量值? 我觉得应该是这样啊,但是结果好像不是。
回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2013-12-3 19:27:15 显示全部楼层
Joey_Chan 发表于 2013-12-3 10:55
同楼上,可以先合成一个QString,我一直都是用QString加入数据库的

现在插入数据库遇到这样一个问题,定义 char len[4].
如果我这样转换类型unsigned int a = *(unsigned int *)(len),这样得到的变量a是否就是len[0],len[1],len[2],len[3]这四个字节组成unsigned int型变量值? 我觉得应该是这样啊,但是结果好像不是。
回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2013-12-3 19:27:52 显示全部楼层
Marvelous 发表于 2013-12-3 11:59
打错字了 是子母表  或者改成间隔字符 就像两位大神说的那样

现在插入数据库遇到这样一个问题,定义 char len[4].
如果我这样转换类型unsigned int a = *(unsigned int *)(len),这样得到的变量a是否就是len[0],len[1],len[2],len[3]这四个字节组成unsigned int型变量值? 我觉得应该是这样啊,但是结果好像不是。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了