1

私は動作する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);
}

上記のコードは for ループの 1 回の繰り返しで実行され、次のエラーがスローされます。

 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)
4

2 に答える 2

1

残りの要素に' (一重引用符)を使用するべきではありませんか?

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 + ")";
于 2012-12-02T04:43:04.863 に答える
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.  */
于 2012-12-02T05:12:11.743 に答える