用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处。 –