하나의 sqlite 테이블에서 다른 BLOB 데이터를 C++로 복사하려고합니다. 그러나 데이터가 새 테이블로 복사되면 손상된 것으로 보입니다. 상기 데이터는 일부 JPEG 이미지를 포함합니다. 내가 TABLE2에 TABLE1에서 복사하기 위해 사용하고 코드는 아래와 같습니다C++ 하나의 데이터베이스에서 다른 데이터베이스로 sqlite BLOB 복사
// Read the blob from the database
int64_t rowID = 0;
sscanf(id.c_str(), "%llu", &rowID);
sqlite3_blob* blobHandle = NULL;
if(sqlite3_blob_open(m_dbHandle_temp, "main", m_currentTileTable.c_str(), "tile_data", rowID, 0, &blobHandle) != SQLITE_OK)
{
sqlite3_blob_close(blobHandle); // An SQLite blob will be initialised regardless of the success of 'sqlite3_blob_open'
return false;
}
tiles_insert_statement.append(")");
// Copy blob to database
sqlite3_stmt *stmt = 0;
const char* tail;
sqlite3_prepare_v2(m_dbHandle, tiles_insert_statement.c_str(), strlen(tiles_insert_statement.c_str())+1, &stmt, &tail);
int bindSuccess = sqlite3_bind_blob(stmt, 1, blobHandle, sqlite3_blob_bytes(blobHandle), SQLITE_TRANSIENT);
if(sqlite3_step(stmt) != SQLITE_DONE)
printf("Error message: %s\n", sqlite3_errmsg(m_dbHandle));
sqlite3_finalize(stmt);
// close handles
sqlite3_blob_close(blobHandle);
나는 위의 코드에서 잘못하고 있어요 있나요, 내가이 손상지고 있다고 말하는 이유는, 내가 읽기하고 있기 때문이다 이미지 뷰어에 표시 할 안드로이드 장치의 얼룩. 표 1의 얼룩은 잘 읽고 표시 할 수 있지만 표 2의 얼룩은 아무 것도 표시하지 않습니다. 어떤 도움이 크게 도움이됩니다.
// Read the blob from the database
int64_t rowID = 0;
sscanf(id.c_str(), "%llu", &rowID);
sqlite3_blob* blobHandle = NULL;
if(sqlite3_blob_open(m_dbHandle_temp, "main", m_currentTileTable.c_str(), "tile_data", rowID, 0, &blobHandle) != SQLITE_OK)
{
sqlite3_blob_close(blobHandle); // An SQLite blob will be initialised regardless of the success of 'sqlite3_blob_open'
return false;
}
unsigned int length = sqlite3_blob_bytes(blobHandle);
// TODO - instances of this class OWN the buffer.
// Delete the buffer in the destructor ;)
unsigned char* buffer = new unsigned char[ length ];
if(sqlite3_blob_read(blobHandle, buffer, length, 0) != SQLITE_OK)
{
return false;
}
tiles_insert_statement.append(")");
sqlite3_stmt *stmt = 0;
const char* tail;
sqlite3_prepare_v2(m_dbHandle, tiles_insert_statement.c_str(), strlen(tiles_insert_statement.c_str())+1, &stmt, &tail);
int bindSuccess = sqlite3_bind_blob(stmt, 1, buffer, length, SQLITE_TRANSIENT);
if(sqlite3_step(stmt) != SQLITE_DONE)
printf("Error message: %s\n", sqlite3_errmsg(m_dbHandle));
sqlite3_finalize(stmt);
// close handles
sqlite3_blob_close(blobHandle);
어쩌면 당신은 더 나은 하나의 DB를 다른 사람에게 첨부하고 SQL 쿼리 내에서 BLOB 복사본을 수행하는 것이 좋을까요? – fnc12