【发布时间】: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)。