【问题标题】:Adding strings to MySQL++ queries将字符串添加到 MySQL++ 查询
【发布时间】:2013-02-17 20:49:00
【问题描述】:

我正在试用MySQL++ 并正在调查查询。我希望能够将字符串变量插入到我的查询中,这样就可以了:

query << "CREATE TABLE beer (" 
      << "beerID smallint(3) unsigned NOT NULL AUTO_INCREMENT,"
      << "beerName varchar(30) NOT NULL,"
      << "PRIMARY KEY (beerID));";

可能是这样的:

query << "CREATE TABLE " << tableName << " (" 
      << fieldName1 << " smallint(3) unsigned NOT NULL AUTO_INCREMENT,"
      << fieldName2 << " varchar(30) NOT NULL,"
      << "PRIMARY KEY (" << fieldName1 << "));";

其中 tableNamefieldName1fieldName2 都是可以在运行时修改的某种类型的字符串变量,以便用户可以定义应用程序运行时的表和字段名称(以及后来的表数据)。这样的事情可能吗?如果是这样,怎么做?我看到的文档对此不是很清楚,而且我使用 C++ 字符串没有任何成功。

【问题讨论】:

    标签: c++ mysql mysql++


    【解决方案1】:

    我没有成功使用 c++ 字符串。

    当你尝试这个时,你不会显示你得到了什么错误。

    我刚刚修改了examples/resetdb.cpp 以执行您正在尝试的操作:

    --- examples/resetdb.cpp    (revision 2716)
    +++ examples/resetdb.cpp    (working copy)
    @@ -132,14 +132,17 @@
            // Send the query to create the stock table and execute it.
            cout << "Creating stock table..." << endl;
            mysqlpp::Query query = con.query();
    +       string table_name("stock");
    +       string f1("item"), f2("num"), f3("weight"), f4("price"),
    +               f5("sdate"), f6("description");
            query <<
    -               "CREATE TABLE stock (" <<
    -               "  item CHAR(30) NOT NULL, " <<
    -               "  num BIGINT NOT NULL, " <<
    -               "  weight DOUBLE NOT NULL, " <<
    -               "  price DECIMAL(6,2) NULL, " << // NaN & inf. == NULL
    -               "  sdate DATE NOT NULL, " <<
    -               "  description MEDIUMTEXT NULL) " <<
    +               "CREATE TABLE " << table_name << " (" <<
    +               f1 << " CHAR(30) NOT NULL, " <<
    +               f2 << " BIGINT NOT NULL, " <<
    +               f3 << " DOUBLE NOT NULL, " <<
    +               f4 << " DECIMAL(6,2) NULL, " << // NaN & inf. == NULL
    +               f5 << " DATE NOT NULL, " <<
    +               f6 << " MEDIUMTEXT NULL) " <<
                    "ENGINE = InnoDB " <<
                    "CHARACTER SET utf8 COLLATE utf8_general_ci";
            query.execute();
    

    我用这些更改重建了 MySQL++,重新运行了它的自测套件,它给出了与以前完全相同的测试结果。如果表结构发生了变化,我预计很多测试都会失败。

    所以,你一定是在做其他事情,但我无法从你的问题中猜出什么。

    【讨论】:

      【解决方案2】:

      你应该看看http://tangentsoft.net/mysql++/doc/html/userman/tutorial.html#qescape

      例如生产:

      SELECT * FROM stock WHERE item = 'Hotdog Buns'
      

      你可以使用:

      string s = "Hotdog Buns";
      query << "SELECT * FROM stock WHERE item = " << quote_only << s;
      

      【讨论】:

      • 我得到一个错误“'quote_only'没有在这个范围内声明”我是否需要包含另一个头文件,到目前为止它只是:#include /include/mysql++/mysql++。 h> #include "/usr/include/mysql++/cmdline.h" #include #include
      • @Fafhrd:不,你不需要直接#include manip.h。它被mysql++.h 间接包含,OP 说他#included。我打赌这是一个命名空间问题。他要么需要在此代码上方说using namespace mysqlpp,要么将操纵器限定为mysqlpp::quote_only
      • 另外,quote_only 操纵器不是你想要的。那是字符串值。 OP 正在询问字段名称,这些名称要么不带引号,要么带反引号。有时需要反引号,但到目前为止发布的任何代码中都没有。
      猜你喜欢
      • 1970-01-01
      • 2022-10-25
      • 1970-01-01
      • 2019-04-02
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      • 2015-07-20
      相关资源
      最近更新 更多