Binärdaten können mit QT nicht in SQLite gespeichert werden

Es können nicht alle binären Datenwerte mit QT in der sqlite3-Tabelle gespeichert werden.

Zu diesem Zweck habe ich eine BLOB-Datenspalte zum Speichern der Binärdatentabelle mit dem Namen logTable erstellt. Ich versuche, binäre Daten in binary_data [] -Puffer einzufügen, mit Werten wie 0x1 bis 0xFF und 0x00 bis 0xFF und so weiter bis 1024 Byte. Aber wenn ich die Abfrage zum Speichern der Daten ausführe, zeigt die Tabelle nur 0x1 bis 0xFF, aber die restlichen Zeichen werden nicht gespeichert (da der nächste unmittelbare Wert 0x00 ist). Ich möchte alle binären Datenwerte speichern?

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    conect_to_log_db("./log.db");

    unsigned char binary_data[1024];

    for(unsigned int i = 0, value = 1; i < 1024; i++, value++)
    {
        binary_data[i] = value;
    }
    store_to_log_db("01/02/2012,13:03:58", binary_data, 1024);
    ......
}


bool store_to_log_db(QString dateTime, unsigned char *data, unsigned int dataLength)
{
    QSqlQuery objQuery(objLogsDB);

    QString query = "CREATE TABLE IF NOT EXISTS logTable(logDateTime VARCHAR(19), packet BLOB, direction INTEGER)";
    objQuery.exec(query);

    QByteArray dataArr;
    dataArr.resize(dataLength);
    for(unsigned int i = 0; i < dataLength; i++)
    {
        dataArr[i] = data[i];
    }

    QVariant blobData = dataArr.data();

    objQuery.prepare("INSERT INTO logTable VALUES(:logDateTime,:packet,:direction)");
    objQuery.bindValue(":logDateTime",dateTime);
    objQuery.bindValue(":packet",blobData,QSql::In | QSql::Binary);
    objQuery.bindValue(":direction",1);

    qDebug() << objQuery.exec();

    return true;
}

Nach der Ausführung dieses Codes beträgt das Ergebnis der Tabelle bis zu 254 Zeichen, wenn ich mit sqlite ausgebe

$ sqlite3 log.db

sqlite> .output try.txt

sqlite> wähle * aus logTable;

$ ls -l try.txt

Größe beträgt 406 Bytes

Antworten auf die Frage(1)

Ihre Antwort auf die Frage