c++中,怎么在sqlite中动态添加变量值


int a1 = 1;
int a2 = 10;
char *sqliteInsert = "insert into test123 values("+a1+","+a2+")";
上面的写法是错误的。问题是c++中有没有类似Java中tostring的用法。

C++ sqlite

千百小吴克 11 years, 6 months ago

Binding Values To Prepared Statements ( http://www.sqlite.org/c3ref/bind_blob.html )

SS.HH answered 11 years, 6 months ago

难道不是printf ?

第六天大魔王 answered 11 years, 6 months ago

嗯,你其实是打算问,在C++中怎么把int类型数据转换成string吧?

我觉得最简单的办法,就是用 std::stringstream


 #include <sstream>

std::stringstream query;
query <<  "insert into test123 values(" << a1 << ", " << a2 << ")";
char *sqliteInsert = query.str().c_str();


更新:我这段代码有问题, query.str().c_str() 返回的结果应该进行 const_cast ,见 @pezy 的答案。

皇家ミ烈焰 answered 11 years, 6 months ago

  1. 你的写法为什么是错的? 因为 char* / const char* 类型不支持 + 操作符。你应该使用 std::string .
  2. 有没有类似 Java toString 的用法? 有。
  • 使用C++11,可以用 std::to_string 方法。
  • C++0x,可以用 stringstream ,如 @spacewander 的答案。

c++11:


 cpp


 #include <string>
int a1 = 1;
int a2 = 10;
std::string insertStr = "insert into test123 values(" + std::to_string(a1) + "," + std::to_string(a2) + ")";
char *sqliteInsert = const_cast<char*>(insertStr.c_str());

c++0x:


 cpp


 #include <sstream>
int a1 = 1;
int a2 = 10;
std::ostringstream oss;
oss << "insert into test123 values(" << a1 << "," << a2 << ")";
char *sqliteInsert = const_cast<char*>(oss.str().c_str());


注意: std::string::c_str() 返回值是 const char * ,所以直接将其赋值给 char * ,编译器可能会给出 error。安全的方式是对其进行 const_cast .

布拉克莫亚 answered 11 years, 6 months ago

Your Answer