【发布时间】:2013-03-25 15:04:07
【问题描述】:
我正在使用 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;
}
这个 sn-p 的结果是:
errno_start=成功,errno_here1=没有这样的文件或目录
初始化成功
【问题讨论】:
-
这肯定是有记录的。如果不是,那么您不应该在任何 SQLite 调用之后依赖
errno的值;它很可能是由 SQLite 调用的函数设置的。