将QList <qvariant>存储到Qt </qvariant>中的PostgreSQL数据库

时间:2013-06-17 16:07:57

标签: qt postgresql

我的问题类似于这个:link,除了我不想序列化QList。我想在数据库表中将QList存储为双精度数组。

我正在为变量val尝试以下bindValue命令:

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列的类型为double precision []。

我收到以下错误,因为您可以看到value的第3个字段为空,这意味着val未正确绑定。

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

但是,如果val只是一个QVariant,那么它可以正常工作。

1 个答案:

答案 0 :(得分:3)

好的,我做了一个解决方法。 我将QList列表转换为postgres数组格式的QString(例如'{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占位符