我正在尝试将QNetworkAccessManager
下载的图像数据作为QByteArray
插入。我试图将此QByteArray
作为BLOB插入。我的表创建查询是
CREATE TABLE TILE_IMAGE(TILE_ID VARCHAR(1050), IMAGE_DATA BLOB,INSERTED_AT DATETIME,USED_AT DATETIME, PRIMARY KEY(TILE_ID))
我创建了这样的插入查询,
query = QString("INSERT INTO ");
query.append("TILE_IMAGE");
query.append(QString("(TILE_ID, IMAGE_DATA ,INSERTED_AT ,USED_AT) VALUES(\'"));
query.append(*tileId);
query.append(QString("\',\'"));
query.append(QString(*imageData));
query.append(QString("\',DATETIME('NOW'),DATETIME('NOW'))"));
但是当我打印它显示的查询时,
"INSERT INTO TILE_IMAGE(TILE_ID, IMAGE_DATA ,INSERTED_AT ,USED_AT) VALUES('ivbase_TILED_MAP_VIEW_16_37396_22531','ÿØÿà ',DATETIME('NOW'),DATETIME('NOW'))"
看BLOB数据只有4长。并且有一些奇怪的价值观。 *imageData
包含的内容的屏幕截图,
图像长256 * 256 * 4。它是一个jpeg图像。
编辑:我遵循了CL的代码,现在IMAGE_DATA列有一些diamon形状字符。图片如下。答案 0 :(得分:0)
您无法将blob的二进制内容转换为字符串。 您必须改为使用parameters:
QSqlQuery query;
query.prepare("INSERT INTO TILE_IMAGE(TILE_ID, IMAGE_DATA) VALUES(?,?)");
query.bindValue(0, *tileId);
query.bindValue(1, *imageData);
query.exec();
答案 1 :(得分:0)
我是如何做到的?
QString query = QString("INSERT INTO ");
query.append("TILE_IMAGE");
query.append(QString("(TILE_ID, IMAGE_DATA ,INSERTED_AT ,USED_AT) VALUES(\'"));
query.append(*tileId);
query.append(QString("\',\'"));
query.append(QString(imageData->toBase64()));
query.append(QString("\',DATETIME('NOW'),DATETIME('NOW'))"));
load(query, QUERY_TYPE_CHANGE,false);
虽然当我从数据库中读取它时仍然显示菱形字符,但它起作用,
QString query;
query = QString("SELECT");
query.append(" IMAGE_DATA FROM TILE_IMAGE WHERE TILE_ID=\'");
query.append(tileId).append(QString("\'"));
int id = getId();
load(query, id,true);
query = resultList.value(0).toMap().value("IMAGE_DATA").value<QString>();
QByteArray arr = QByteArray::fromBase64(query.toLatin1());
虽然知道为什么它会显示菱形字符会有所帮助吗?