用C/C++接口插入二進制數據轉換成SQLite數據庫的SQLite不存儲BLOB:含有 0字節
// Previously: "create table tt(i integer primary key, b blob)"
sqlite3 *sqliteDB;
if(sqlite3_open("example.db", &sqliteDB) == 0)
{
// "insert" statement
const char *sqlText = "insert into tt (i,b) values (?,?)";
sqlite3_stmt *preparedStatement;
sqlite3_prepare_v2(sqliteDB, sqlText, (int)strlen(sqlText), &preparedStatement, 0);
// add the number
sqlite3_bind_int(preparedStatement, 1, 1);
// add the data
char myBlobData[] = "He\0llo world"; // sizeof(myBlobData) is 13 bytes
sqlite3_bind_blob(preparedStatement, 2, myBlobData, sizeof(myBlobData), 0); // returns SQLITE_OK
// store in database
sqlite3_step(preparedStatement); // returns SQLITE_DONE
sqlite3_close(sqliteDB);
}
此存儲的代替13字節的團塊含有「他」的2字節的團塊,它被要求存儲。爲什麼?
它似乎在第一個0字節處結束,但blob不是字符串(因此需要sqlite3_bind_blob的大小參數),爲什麼它會將任意二進制數據視爲c樣式字符串?
適用於我^ {tm}。你確定這不僅僅是打印程序不顯示完整的blob嗎?嘗試'sqlite3 example.db「從命令行上的tt;」'選擇長度(b)。 – user786653
不要忘記接受答案,即使你必須接受你自己的答案。 –
是,例如printf()停在\ 0處。 –