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

数据库怎样储存QMap容器啊,急急急

9
回复
8251
查看
[复制链接]
累计签到:8 天
连续签到:1 天
来源: 2014-5-17 17:07:17 显示全部楼层 |阅读模式
10Qter豆



我用上面的代码去在一个数据库中储存map容器,可是没有成功,请问哪出了问题?数据库可以储存容器吗?
请知道的朋友回答我,非常急!!
附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

类似这样吧,不知道为啥不能直接插入QMap
回复

使用道具 举报

累计签到:6 天
连续签到:1 天
2014-5-17 17:07:18 显示全部楼层
  1.     QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
  2.     db.setDatabaseName("tb.db");
  3.     db.open();
  4.     QSqlQuery query(db);
  5.     query.exec("CREATE TABLE student (value BLOB)");
  6.     //准备数据
  7.     QMap<QString,int> map;
  8.     map["one"] = 1;
  9.     map["two"] = 2;
  10.     map["three"] = 3;
  11.     //序列化数据
  12.     QByteArray buffMap;
  13.     QDataStream in(&buffMap,QIODevice::WriteOnly);
  14.     in.setVersion(QDataStream::Qt_5_2);
  15.     in << map;
  16.     //插入记录
  17.     query.prepare("INSERT INTO student VALUES (:value)");
  18.     query.bindValue(":value",buffMap);
  19.     query.exec();
  20.     //开始查询
  21.     query.exec("SELECT value FROM student");
  22.     while (query.next()) {
  23.         //获取当前记录
  24.         QByteArray buffRec = query.record().value("value").toByteArray();
  25.         //反序列化数据
  26.         QDataStream out(&buffRec,QIODevice::ReadOnly);
  27.         in.setVersion(QDataStream::Qt_5_2);
  28.         QMap<QString,int> mapValue;
  29.         out >> mapValue;
  30.         qDebug("map size: %d", mapValue.size());
  31.     }
复制代码
类似这样吧,不知道为啥不能直接插入QMap
回复

使用道具 举报

累计签到:956 天
连续签到:1 天
2014-5-17 17:58:53 显示全部楼层
不能存储容器,能存储容器里边的内容,例如你写的id
回复

使用道具 举报

累计签到:6 天
连续签到:1 天
2014-5-17 18:18:05 显示全部楼层
可以把字段类型改为BLOB就可以写入了,不过读出时候需要你转换一下
回复

使用道具 举报

累计签到:8 天
连续签到:1 天
2014-5-17 18:28:53 显示全部楼层
imlison 发表于 2014-5-17 18:18
可以把字段类型改为BLOB就可以写入了,不过读出时候需要你转换一下

请问下怎么改,我不会
回复

使用道具 举报

累计签到:8 天
连续签到:1 天
2014-5-17 18:36:01 显示全部楼层
1363386323 发表于 2014-5-17 18:28
请问下怎么改,我不会

你帮我写一个能储存map的数据库吧
回复

使用道具 举报

累计签到:6 天
连续签到:1 天
2014-5-17 19:42:41 显示全部楼层
1363386323 发表于 2014-5-17 18:36
你帮我写一个能储存map的数据库吧

刚看了下,貌似不支持直接把QMap当做QVariant写到数据库去,不知道是数据库原因还是Qt的原因。不过把这个QVariant转成QByteArray再进行存取就可以了。
回复

使用道具 举报

累计签到:8 天
连续签到:1 天
2014-5-17 21:56:29 显示全部楼层
imlison 发表于 2014-5-17 19:42
刚看了下,貌似不支持直接把QMap当做QVariant写到数据库去,不知道是数据库原因还是Qt的原因。不过把这个 ...

按你说的做了,我却转换失败了,你是怎样转换的?
回复

使用道具 举报

累计签到:8 天
连续签到:1 天
2014-5-17 22:04:27 显示全部楼层
imlison 发表于 2014-5-17 20:26
类似这样吧,不知道为啥不能直接插入QMap

按你说的成功了,非常感谢
回复

使用道具 举报

累计签到:6 天
连续签到:1 天
2014-5-17 23:48:53 显示全部楼层
1363386323 发表于 2014-5-17 22:04
按你说的成功了,非常感谢

这个办法略微有点麻烦,不知道还有没有更简便的方法。还是等站长大人来看看吧,我也是初学
回复

使用道具 举报

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

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