2016-11-24 678 views
0

我想更新圖像作爲blob類型從數據庫從QImage到數據庫。我用下面的代碼做到這一點:更新圖像字段作爲blob類型到數據庫在QT C++

int reportingID = 10; 
    // props is QMap<QString, QVariant> fill with string and QImage as a QVariant 
QSqlQuery sqlQueryImage(_db); 
bool ok = sqlQueryImage.prepare("UPDATE reporting SET leftIcon = iconL WHERE id = 'ID'" 
        "VALUES (:iconL,:ID)"); 
qDebug() << "text: " << ok << endl; 
sqlQueryImage.bindValue(":iconL", QVariant(props["left_icon"].toByteArray())); 
sqlQueryImage.bindValue(":ID", QVariant(reportingID)); 

我以前上的代碼更新數據庫的QString和它的工作正確的,但它並沒有更新的圖像工作。我不知道我的問題在哪裏!

+0

非常奇怪的更新語句。也許它應該像''UPDATE reporting SET leftIcon =':iconL'WHERE id =':ID'「''? – 2016-11-24 13:03:20

回答

0
QSqlQuery sqlQueryImage(_db); 
QImage img_enrll = props["left_icon"].value<QImage>(); 
QByteArray arr; 
QBuffer buffer(&arr); 
buffer.open(QIODevice::WriteOnly); 
img_enrll.save(&buffer, "jpg"); 

sqlQueryImage.prepare("UPDATE reporting SET leftIcon = :iconL WHERE id = :ID"); 
sqlQueryImage.bindValue(":iconL", arr, QSql::InOut | QSql::Binary); 
sqlQueryImage.bindValue(":ID", reportingID, QSql::InOut | QSql::Binary); 

if (!sqlQueryImage.exec()) { 
    qDebug() << Q_FUNC_INFO << "sql error (update icon): " << sqlQuery.lastError(); 
    return; 
}