我正在开发使用自定义设计的插件的C++ API
使用它们的API和特定的SQL与不同的数据库引擎接口(interface)
句法。
目前,我正在尝试找到一种插入BLOB的方法,但是由于NULL
是
C/C++中的终止字符,构造时BLOB会被截断
INSERT INTO查询字符串。到目前为止,我已经与
//...
char* sql;
void* blob;
int len;
//...
blob = some_blob_already_in_memory;
len = length_of_blob_already_known;
sql = sqlite3_malloc(2*len+1);
sql = sqlite3_mprintf("INSERT INTO table VALUES (%Q)", (char*)blob);
//...
我希望,如果完全可以在SQLite3交互式控制台中执行此操作,则应该可以使用正确转义的
NULL
字符构造查询字符串。也许有一种方法可以使用标准SQL来实现,而SQLite SQL语法也支持这种方法?当然,以前一定有人遇到过同样的情况。我已经用Google搜索并找到了一些答案,但是使用的是其他编程语言(Python)。
预先感谢您的反馈。
最佳答案
您将要将此函数与已准备好的语句一起使用。
int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*));
在C/C++中,处理字符串中NULL的标准方法是存储字符串的开头和长度,或者存储指向字符串的开头和字符串的结尾的指针。