Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Использование переменных в SQL запросе


Автор: Alkash 21.3.2012, 12:24
Вновь приветствую всех присутствующих, господа - столкнулся с проблемой. Пытаюсь выполнить sql запрос, в котором values - есть заранее неизвестные значения, и передаются в запрос при помощи - переменных.Пытаюсь это сделать следующим способом
Код

void CCafe::new_station(char *hostname, char *ip)
 {   sqlite3 *conn;
     sqlite3_stmt *res;
     int error = 0;
     int rec_count = 0;
     const char *tail;
     if(bdpath="")
     {
       cout << "clean path to database";
     }
     error = sqlite3_open(bdpath, &conn);
     if (error)
     {
         cout << "cant not open database";
         exit(0);
     }
     error = sqlite3_prepare_v2(conn, "select * from stations", 1000, &res, &tail);
         if (error != SQLITE_OK)
         {
             cout << "first station\n";
         }
         while (sqlite3_step(res) == SQLITE_ROW)
             {
                 rec_count++;
             }
         error = sqlite3_exec(conn, "insert into stations values("+rec_count+","+hostname+","+ip+",0,0)", 0, 0, 0);
    sqlite3_finalize(res);
    sqlite3_close(conn);

 }

и получаю:
ошибка: invalid operands of types «const char*» and «const char [2]» to binary «operator+»
Каким же образом - в запрос подпихнуть свою переменную?

Автор: bsa 21.3.2012, 12:42
Alkash, 
Код
{
   ostringstream tmp;
   tmp << "insert into stations values(" << rec_count << "," << hostname << "," << ip << ",0,0)";
   error = sqlite3_exec(conn, tmp.str().c_str(), 0, 0, 0);
}

Автор: Alkash 21.3.2012, 12:59
Спасибо.

Автор: borisbn 23.3.2012, 08:16
Alkash, а ещё, если мне не изменяет память, строковые переменные (у тебя  hostname и ip) в SQL нужно заключать в кавычки. Т.о. код должен быть таким
Цитата

ostringstream tmp;
   tmp << "insert into stations values(" << rec_count << ",'" << hostname << "','" << ip << "',0,0)";
   error = sqlite3_exec(conn, tmp.str().c_str(), 0, 0, 0);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)