SQLite CREATE TABLE和INSERT工作,但返回SQLITE_ERROR“没有这样的表”C ++

时间:2014-02-28 20:18:15

标签: c++ sql sqlite

所以这是我第一次尝试使用C ++中的SQLite,而且我已经完成了所有工作,但它正在抛出SQLITE_ERROR - “没有这样的表:( tablename)”错误。我无法弄清楚发生了什么 - 当我正在创建一个表时,它不应该抛出那些错误吗?我很清楚表格不存在,这就是我创建它的原因......

处理程序对象有一个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);
}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这是问题,与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