简体   繁体   English

QByteArray作为Blob数据的一部分插入了sqlite3(C ++)

[英]QByteArray as blob data inserted partially in sqlite3 (c++)

I am trying to insert an image data which I have downloaded with QNetworkAccessManager as QByteArray . 我正在尝试插入使用QNetworkAccessManager下载的图像数据作为QByteArray I am trying to insert this QByteArray as BLOB. 我试图将此QByteArray插入为BLOB。 My table creation query is 我的表创建查询是

CREATE TABLE TILE_IMAGE(TILE_ID VARCHAR(1050), IMAGE_DATA BLOB,INSERTED_AT DATETIME,USED_AT DATETIME, PRIMARY KEY(TILE_ID))

I created the insert query like this, 我这样创建插入查询,

    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'))"));

But when I print the query it shows, 但是当我显示查询时,

"INSERT INTO TILE_IMAGE(TILE_ID, IMAGE_DATA ,INSERTED_AT ,USED_AT) VALUES('ivbase_TILED_MAP_VIEW_16_37396_22531','ÿØÿà',DATETIME('NOW'),DATETIME('NOW'))" 

See the BLOB data is only 4 length long. 看到BLOB数据只有4个长度长。 And has some weird values. 并具有一些怪异的价值观。 The screen shot of what the *imageData contains is, *imageData包含的屏幕截图是, 在此处输入图片说明

The image 256*256*4 length long. 图片长度为256 * 256 * 4。 Its a jpeg image. 它是jpeg图片。

EDIT: I followed CL's code and now the IMAGE_DATA column has some diamon shape characters. 编辑:我遵循CL的代码,现在IMAGE_DATA列具有一些菱形形状字符。 The image is below. 图片如下。 在此处输入图片说明

You cannot convert the binary contents of blob into a string. 您不能将Blob的二进制内容转换为字符串。 You must use parameters instead: 您必须改用参数

QSqlQuery query;
query.prepare("INSERT INTO TILE_IMAGE(TILE_ID, IMAGE_DATA) VALUES(?,?)");
query.bindValue(0, *tileId);
query.bindValue(1, *imageData);
query.exec();

How I managed to do it is 我是如何做到的

    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);

though it is still showing the diamond shaped characters when I read it from the database like this it worked, 尽管当我像这样工作时从数据库中读取它时,它仍然显示菱形字符,

    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());

It will be helpful though to know why it is showing the diamond shaped characters? 知道为什么会显示菱形字符会有所帮助?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM