Как сохранить QVariantMap в QSqlDatabase

У меня уже есть инфраструктура для работы. Существует функция вставки со следующей сигнатурой:

insert(const QString& key, const QVariant& value)

В рамках функции готовится QSqlQuery:

QSqlQuery query{mySqlDatabase};
QString sql = "INSERT INTO my_table(key, value) VALUES (:key, :value)"
query.prepare(sql);
query.bindValue(ENC(":key"), key);
query.bindValue(ENC(":value"), value.toString());

if (!query.exec()) {
    const auto error = q2.lastError();
    throw std::exception(QString("failed to insert: %1")).arg(error.text()));
}

Это работает для всех вставок, которые использовались до сих пор, но теперь я пытаюсь вставить QVariantMap (который является typedef для QMap<QString,QVariant>, на самом деле я пытаюсь сохранить тип QMap<QString,int>):

insert(g_theKey, QVariant(m_theMap));

При выполнении запроса я получаю следующую ошибку:

введите здесь описание изображения

Я искал решения как на веб-сайте Qt, так и здесь, но не нашел рабочего решения.


person Attis    schedule 07.05.2021    source источник
comment
Какое поле является значением?   -  person eyllanesc    schedule 07.05.2021
comment
Это QVariant&   -  person Attis    schedule 07.05.2021
comment
Хм, кажется, ты меня не понял. my_table - это таблица в базе данных, поэтому мой вопрос: какой тип данных является значением поля таблицы my_table? То же самое для ключа. В БД нет типа QVariant   -  person eyllanesc    schedule 07.05.2021
comment
Это ожидает строку. Эта часть функциональности меня не беспокоит, потому что, как указано выше, эта функция работает для других типов, но не работает для QVariantMap.   -  person Attis    schedule 07.05.2021
comment
Что это за другие типы?   -  person eyllanesc    schedule 07.05.2021
comment
Я думаю, что нашел, что было не так. Согласно документации Qt: QString QVariant::toString() const — возвращает вариант как QString, если вариант имеет type() String, Bool, ByteArray, Char, Date, DateTime, Double, Int, LongLong, StringList, Time, UInt , или ULongLong; в противном случае возвращает пустую строку. По сути, QVariantMap нельзя преобразовать в строку. Итак, мое решение на данный момент состоит в том, чтобы упорядочить и удалить строки QVariantMap вручную.   -  person Attis    schedule 07.05.2021
comment
Собственно, это то, что я хотел указать вам   -  person eyllanesc    schedule 07.05.2021
comment
Для сериализации объекта QMap я нашел эту статью: stackoverflow.com/questions/27285889/   -  person Attis    schedule 12.05.2021