ошибки коннектора mysql с преобразованием кода из Java в переполнение стека

У меня есть Java-код, который работает

//**Correct Java query**
QueryString = "INSERT IGNORE INTO stock_prices (symbol,timestamp,open,high,low,close,vol) VALUES ('"+ data[0] + "', '" + data[1] + "', " + data[2] + ", " + data[3] + ", " + data[4] + ", "+ data[5] + ", " + data[6] + ")";

Однако в Java вы можете легко добавить double или int со строкой, а в C ++ вы не можете, я пробовал несколько вещей для запроса в C ++, но он не работает так, как мне кажется. Что я делаю неправильно? Есть ли лучший способ сделать это в C ++. Вот мой запрос.

//***Incorrect C++ query**
sql::Statement *stmt;
stmt = con->createStatement();

for (int i = 0; i < (int)timestamp.size(); i++) {
string s = symbols[ii];
string t = timestamp[i];
double v = vwap[i];

string query = "INSERT INTO stock_prices(symbol,time_stamp,vwap) VALUES('" + s + "', '" + t + "', " + boost::lexical_cast<std::string>(v) + ")";
stmt->executeQuery(query);
}

Приведенный выше код выполняется для 1 итерации цикла for, а затем выдается следующая ошибка

 terminate called after throwing an instance of 'sql::SQLException'
what():
Aborted

Я распечатал запрос C ++ (который работает, если я копирую его в MySQL)

INSERT INTO stock_prices(symbol,time_stamp,vwap) VALUES('A', '2010-01-04 08:01:00', 0)

0

Решение

Разве вы не должны использовать (одинарная кавычка) на оставшиеся элементы?

QueryString = "INSERT IGNORE INTO stock_prices
(symbol,timestamp,open,high,low,close,vol) VALUES
('"+ data[0] + "', '" + data[1] + "', '"+ data[2] + "', '" + data[3] + "', '"+ data[4] + "', '" + data[5] + "', '"+ data[6] + "'
)";

Вместо этого:

string s = "blah";
string t = "bla";
double v = 43;

string query = "INSERT INTO stock_prices(symbol,time_stamp,vwap) VALUES('" + s + "', '" + t + "', " + boost::lexical_cast<std::string>(v) + ")";

попробуй это:

double v = 43.0;
char vs[20];
sprintf(vs,"%f",v);

string query = "INSERT INTO stock_prices(symbol,time_stamp,vwap) VALUES('" + s + "', '" + t + "', " + vs + ")";
1

Другие решения

Нет, попробуйте использовать заголовок string.h

char query[1024]; /* you get 1024 chars to try it */
char qstart="INSERT INTO stock_price_(symbol,timestamp,vol) VALUES(";
char qstr2="whatever s is ";
char separator=",";
char leftelips="(";
char rightelips=")";

strcpy(query,qstart);
strcat(query,qstr2);
strcat(query,separator);
/* ...........  e.t.c.  */
1

По вопросам рекламы [email protected]