所以这是我第一次尝试使用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);
}
有什么想法吗?
答案 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