SQLite BLOB mit NULL-Werten



  • Hallo Leute

    Ich habe eine Binärdatei, die ich als BLOB in eine SQLite Datenbank schreiben möchte. Leider wird nur bis zum ersten auftauchen eines NULL-Charakters (0x00) in die DB geschrieben, der Rest wird abgeschnitten. Leider beinhaltet die Binärdatei viele NULL-Werte und es sollte eigentlich laut diesem Posting funktionieren:
    http://stackoverflow.com/questions/404879/sqlite3-insert-blob-with-null-characters-in-c

    Mein Beispiel:

    char blobData[1024]
    // ... hier Daten in blobData schreiben und blobSize setzen
    const char* sql = "INSERT INTO test VALUES (?)", *tail = 0;
    sqlite3_stmt* stmt = 0;
    sqlite3* dbs = 0;
    sqlite3_open("out.db", &dbs);
    sqlite3_prepare_v2(dbs, sql, strlen(sql)+1, &stmt, &tail);
    sqlite3_bind_blob(stmt, 1, blobData, blobSize, SQLITE_TRANSIENT);
    if (sqlite3_step(stmt) != SQLITE_DONE)
    	printf("Error message: %s\n", sqlite3_errmsg(dbs));
    sqlite3_finalize(stmt);
    

    Hat sich einer von euch schonmal damit beschäftigt oder ein ähnliches Problem gehabt? Bin echt am verzweifeln!!!

    Danke

    Gruß Bernd88



  • Hallo,

    wie hast du blobSize bestimmt?

    MfG,

    Probe-Nutzer



  • Relativ einfach mit

    std::ifstream file("binary.data", std::ifstream::in | std::ifstream::binary);
    
    file.seekg(0, std::ios::end);
    int blobSize = file.tellg();
    file.seekg(0, std::ios::beg);
    
    char* blobData = new char[blobSize];
    ...
    

    Und das ist auch der Fehler. Denn wenn ich ein statisches Array nehme

    char blobData[] = {16, 61, 22, 16, 0, 0, 0, 32};
    int blobSize = sizeof(blobData);
    sqlite3_bind_blob(stmt, 1, blobData, sizeof(blobdata), SQLITE_TRANSIENT);
    

    und dieses dann übergebe, so funktioniert der Prozess. Bei meiner ersten Variante mit dynamischem Speicher hingegen klappt es nicht. Ich muss noch mal genau drüber schauen, das kann eigentlich nicht sein. Hmm...

    Bernd


Anmelden zum Antworten