【问题标题】:SQLite CREATE TABLE and INSERT work, but return SQLITE_ERROR "no such table" C++SQLite CREATE TABLE 和 INSERT 工作,但返回 SQLITE_ERROR "no such table" C++
【发布时间】:2014-02-28 20:18:15
【问题描述】:

所以这是我第一次在 C++ 中使用 SQLite,我已经完成了所有工作,但它抛出了 SQLITE_ERROR - “no such table: (tablename)”错误。我不知道发生了什么 - 当我创建表格时它不应该抛出这些错误,对吧?我很清楚该表不存在,这就是我创建它的原因...

Handler 对象有一个 fn。如果表不存在,则创建架构:

result = handler->createSchema();

调用者:

bool SQLiteHandler::createSchema()
{
    if(!isValid())
    {
        return false;
    }

    if(schemaExists())
    {
        return false;
    }

    //Create necessary table(s)
    std::string query = "CREATE TABLE symbols (id INTEGER PRIMARY KEY AUTOINCREMENT, ticker, last_update, daily_data, minute_data, tick_data);";

    dbConn->executeQuery(query);

    if(dbConn->getStatus() == DatabaseConnector::DBC_SQL_ERROR)
    {
        return false;
    }

    return true;
}

调用(executeQuery(query)):

void SQLiteDBConnector::executeQuery(const std::string Query)
{
    if(!isConnected())
    {
        return;
    }

    //Execute Query
    char* sqlError = 0;

    int rc = sqlite3_exec(db, Query.c_str(), NULL, NULL, &sqlError);

    if(rc != SQLITE_OK)
    {
        //Error
        std::string err = "[SQLite Error]: ";
        err += std::string(sqlError);
        setStatus(DBC_SQL_ERROR, err);
    }

    sqlite3_free(sqlError);
}

有什么想法吗?

【问题讨论】:

  • 你试过没有“;”在 CREATE TABLE 语句的末尾?
  • 刚刚尝试过 - 仍然出现同样的错误。 SQLite 语法在每个 SQL 语句的末尾使用 ;。
  • 语句没有问题,代码看起来还可以。我不确定sqlite3_exec 会返回什么,但sqlite3_step 不会返回SQLITE_OK
  • 我认为可能也是这样,但我让它打印了返回码,它对应于 SQLITE_ERROR (1)。

标签: c++ sql sqlite


【解决方案1】:

这就是问题所在,与 SQLite 无关,只是我的一个愚蠢的错误。发生错误时我正在更新状态,但不是在某些事情成功时更新状态,因此如果出现错误,它就会挂起。我不完全确定是什么触发了第一个错误,但通过更改:

if(rc != SQLITE_OK)
{
    //Error
    std::string err = "[SQLite Error]: ";
    err += std::string(sqlError);
    setStatus(DBC_SQL_ERROR, err);
}

这样的:

if(rc != SQLITE_OK)
{
    //Error
    std::string err = "[SQLite Error]: ";
    err += std::string(sqlError);
    setStatus(DBC_SQL_ERROR, err);
}
else
{
    setStatus(DBC_CONNECTED);
}

它正在工作。那是我太愚蠢了:P

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    相关资源
    最近更新 更多