จัดเก็บ QList‹QVariant› ไปยังฐานข้อมูล PostgreSQL ใน Qt

คำถามของฉันคล้ายกับคำถามนี้: ลิงก์ ยกเว้นว่าฉันไม่ต้องการทำให้เป็นอนุกรม คิวลิสต์ ฉันต้องการจัดเก็บ QList เป็นอาร์เรย์ที่มีความแม่นยำสองเท่าในตาราง DB

ฉันกำลังลองใช้คำสั่ง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 ของตารางเป็นประเภท double precision[]

ฉันได้รับข้อผิดพลาดต่อไปนี้ เนื่องจากคุณเห็นว่าฟิลด์ที่ 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