sqlite3 C++ API を使用しています。走った後
int rc = sqlite3_exec(db, pSQL, 0, 0, 0);
rc
の結果を返しますSQLITE_OK
。
さらに、私はテストしましたerrno != 0
。の結果cout << strerror(errno) << endl
は一貫しています: No such file or directory
つまり、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=そのようなファイルまたはディレクトリはありません
初期化成功