我正在使用 sqlite3 C++ api。运行后
int rc = sqlite3_exec(db, pSQL, 0, 0, 0);
它返回的rc
结果SQLITE_OK
。
此外,我已经测试了errno != 0
. 结果cout << strerror(errno) << endl
是一致的:没有这样的文件或目录
换句话说,我知道 sqlite3 有自己的一组“返回代码”(即 SQLITE_OK)。但是,sqlite3 是否正确/一致地使用 errno 代码?也就是说,如果我的应用程序的另一部分正在使用全局 errno 变量,我是否应该在每次调用后重置它sqlite3_exec
?
谢谢。
我的代码的更完整示例:
const int errno_start = errno;
if (errno_start > 0) {
std::cout << "errno=" << strerror(errno) << std::endl;
std::cout << "errno_start=" << strerror(errno_start) << std::endl;
}
// prepare sql statement
const char *pSQL;
pSQL = "CREATE TABLE "
"IF NOT EXISTS "
"test1"
"("
"id INTEGER,"
"field VARCHAR(32),"
"value DOUBLE,"
"timestamp DATETIME"
")";
//int rc = sqlite3_exec(db, pSQL, callback, 0, &szErrMsg);
int rc = sqlite3_exec(db, pSQL, 0, 0, 0);
const int errno_here1 = errno;
if (errno_here1 > 0) {
std::cout << "errno_start=" << strerror(errno_start) << ", errno_here1="
<< strerror(errno_here1) << std::endl;
}
if (rc != SQLITE_OK) {
std::cout << "SQL Error: " << szErrMsg << std::endl;
sqlite3_free(szErrMsg);
} else {
std::cout << "initialize successful" << std::endl;
}
此片段的结果是:
errno_start=成功,errno_here1=没有这样的文件或目录
初始化成功