如何在 SQLite 数据库中存储枚举
我正在尝试使用 QSql 将枚举存储在 SQLite 数据库中。 我有以下类:
partydao.h:
class PartyDao : public QObject
{
public:
enum partyType { typeCompany, typePerson };
private:
Q_OBJECT
Q_ENUMS(partyType)
Q_PROPERTY(partyType type READ type WRITE set_type)
// other declarations
};
Q_DECLARE_METATYPE(PartyDao::partyType)
partydao.cpp:
#include "partydao.h"
static int id = qRegisterMetaType<PartyDao::partyType>("partyType");
我确实像这样插入:
PartyDao p;
p.setProperty("type", QVariant::fromValue(PartyDao::typePerson));
QSqlQuery query;
query.prepare("INSERT INTO party (type) values (:type)");
qDebug() << p.property("type").isNull();
query.bindValue(":type", p.property("type"));
query.exec();
虽然 qDebug() 打印“false”(即属性 not< /strong> null), null 值存储在 db.
我尝试过 TEXT 和 INTEGER 类型的列,但没有成功。
你能告诉我我做错了什么吗?
编辑:
我刚刚检查过,持有枚举的 QVariant 声称它无法转换为 QString 或 int (canConvert
和 canConvert< QString>()
返回 false)。有没有办法添加这个转换?
I'm trying to store enum in SQLite database using QSql.
I have following class:
partydao.h:
class PartyDao : public QObject
{
public:
enum partyType { typeCompany, typePerson };
private:
Q_OBJECT
Q_ENUMS(partyType)
Q_PROPERTY(partyType type READ type WRITE set_type)
// other declarations
};
Q_DECLARE_METATYPE(PartyDao::partyType)
partydao.cpp:
#include "partydao.h"
static int id = qRegisterMetaType<PartyDao::partyType>("partyType");
I do insert like this:
PartyDao p;
p.setProperty("type", QVariant::fromValue(PartyDao::typePerson));
QSqlQuery query;
query.prepare("INSERT INTO party (type) values (:type)");
qDebug() << p.property("type").isNull();
query.bindValue(":type", p.property("type"));
query.exec();
Although qDebug() prints "false" (i.e. property is not null), null value is stored in db.
I've tried with column of type TEXT and INTEGER with no success.
Can you tell me what I'm doing wrong?
EDIT:
I've just checked and QVariant holding my enum claims it can't be converted to QString or int (canConvert<int>()
and canConvert<QString>()
return false). Is there a way to add this conversion?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我没有找到任何方法来使用用户类型的 QVariants 自动转换。因此,我创建了用于转换的单例存储规则。
我使用从
qRegisterMetaType()
返回的值注册自定义类型,并在每个应用<->数据库传输上执行转换。如果您找到任何更优雅的解决方案,请告诉我,我很乐意接受您的答案。
I didn't find any way to use auto conversion of QVariants of user type. Therefore I've created singleton storing rules for conversion.
I register my custom types using value returned from
qRegisterMetaType()
and perform conversions on each app<->db transfer.Please let me know if you find any more elegant solution and I'll be happy to accept your answer.
只需将初始值分配给枚举中的第一个元素,编译器就会自动递增任何进一步的定义,然后将此值保存到数据库中?您可能必须在 int 之间来回转换它,但 qvariant 应该为您处理好这个问题。
IE
Just assign initial value to the first element in your enum, and the compiler will auto-increment any further definitions, then save this value to your database? You may have to cast it back and forth between an int, but qvariant should take care of that for you.
ie