Сохраните QList‹QVariant› в базе данных PostgreSQL в Qt

Мой вопрос похож на этот: ссылка, за исключением того, что я не хочу сериализовать QList. Я хочу сохранить QList как массив двойной точности в таблице БД.

Я пытаюсь выполнить следующую команду bindValue для переменной val:

query.bindValue( QStrFromSrcEnc( id ), QVariant::fromValue( val ) );

где val — это QList, а id — это ":value"

Я выполняю следующий запрос postgres:

"INSERT INTO valtable( type_id, asset_id, value, tag )\n"
            "VALUES ( :typeId, :assetId, :value, :tag )\n"

Столбец value таблицы имеет тип двойной точности[].

Я получаю следующую ошибку, как вы можете видеть, 3-е поле для value пустое, что означает, что val не было правильно привязано.

ERROR: syntax error at or near ","
LINE 1: EXECUTE qpsqlpstmt_13e (60, 63, , '')
                                        ^

однако, если val — это просто QVariant, то он работает нормально.


person Lyman Zerga    schedule 17.06.2013    source источник


Ответы (1)


Хорошо, я сделал обходной путь. Я конвертирую список QList в QString в формате массива postgres (например, '{1.32,4.43}').

QString valueStr = QStrFromSrcEnc("{");

for(int i=0; i<List.size(); ++i)
{

    valueStr += QString::number( List[i] );
    valueStr += QStrFromSrcEnc(",");
}

valueStr.chop(1);
valueStr += QStrFromSrcEnc("}");

затем я привязываю строковое значение к заполнителю :val

person Lyman Zerga    schedule 18.06.2013