sqlite3 c ++ вставка, не вставка - PullRequest
0 голосов
/ 21 апреля 2020

База данных сообщает, что она успешно открывается. Когда я запускаю его, в мой стол ничего не вставляется. Я пытался обратить пристальное внимание на одинарные кавычки, так как у многих других постов были проблемы с этим, но я все еще не вижу никаких вставок.

std::string id_check = "IF NOT EXISTS (SELECT 1 FROM known_wheels WHERE diameter = '"+ std::to_string(diameter) +"' AND height = '"+ std::to_string(height) +"');";

std::string id_insert = "INSERT INTO known_wheels VALUES ('"+ std::to_string(diameter) +"', '"+ std::to_string(height) +"');";

if(sqlite3_exec(db, id_check.c_str(), NULL, 0, &messageError) != SQLITE_ROW)
{   
   sqlite3_exec(db, id_insert.c_str(), NULL, NULL, &messageError);
}
else
{
 ROS_INFO("Wheels exists");
}

Где я открываю БД (я признаю, что fprintf древний, это было из учебника, с которым я учился).

int wheels_compare::opendb(int argc, char** argv)
{
    sqlite3* db;
    char *zErrMsg = 0;
    int rc;

    rc = sqlite3_open("wheels.db", &db);

    if(rc)
    {
        fprintf(stderr, "can't open database: %s\n", sqlite3_errmsg(db));
        return(0);
    }
    else
    {
        fprintf(stderr, "Opened database successfully\n");
    }

}

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Оператор:

IF NOT EXISTS (SELECT 1 FROM known_wheels....

не является допустимым оператором SQL, поскольку IF нельзя использовать в запросе SQLite. Чего вы хотите достичь, это вставить значения для diameter и height, которые еще не существуют, верно? Самый простой способ получить эту функциональность - создать уникальный индекс для комбинации этих столбцов:

CREATE UNIQUE INDEX un_known_wheels ON known_wheels(diameter, height);

, поэтому вам не нужно проверять перед каждой вставкой, существуют ли значения , Или просто бросьте IF и оставьте это:

std::string id_check = "SELECT 1 FROM known_wheels WHERE diameter = '"+ std::to_string(diameter) +"' AND height = '"+ std::to_string(height) +"';"
0 голосов
/ 21 апреля 2020

Моя база данных не открывалась, поэтому ни одна из команд SQL не будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...