我正在使用SOCI从我的QT4 C ++应用程序中建立MYSQL连接。我可以硬编码mysql服务器IP,用户名和密码,但我宁愿将这些信息作为变量传递。
例如,我想做类似的事情,但没有接受这些参数的函数:
char host [9];
sprintf(host, "192.x.x.x");
session sql(mysql, "host=%s db=dbname user=user password=password", host);
我也尝试过:
string host = "192.x.x.x";
session sql(mysql,
boost::format("host=%1% db=dbname user=user password='pword'",
%host));
但这也失败了。
更新:我能够像这样解决问题:
QString connection;
connection.append("host=" + host +
" db=dbname user=" + uname +
" password=" + pword);
session sql(mysql, connection.toLatin1().data());
答案 0 :(得分:1)
然后你可以构建字符串并连接变量。最后致电.str().c_str()
。
答案 1 :(得分:1)
尝试使用QString的arg函数。
session sql(mysql, QString("host=%1 db=%2 user=%3 password=%4").arg(sqlserver).arg(dbname).arg(user).arg(password));
我知道这很难看,Qt应该提出一个更漂亮的解决方案,但它确实有效。
答案 2 :(得分:1)
你不能随意传递任何需要包含格式的字符串1的函数,然后传递任意数量的函数。 C ++根本不起作用。你需要在传入之前构建你的字符串。怎么样?其他两个答案提供了方法,即使它们使session
构造函数的调用语义错误(这是你要弄清楚的部分)。你也可以考虑使用boost :: format,或者如果你想成为邪恶的话,可以考虑使用sprintf。