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-cMein 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