Добавление строк в запросы MySQL++

Я пробую 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 << "));";

где tableName, fieldName1 и fieldName2 - это все типы строковых переменных, которые можно изменять во время выполнения, чтобы пользователь мог определять имена таблиц и полей (и более поздние данные таблицы) во время работы приложения. Это возможно? Если так, то как? Документация, которую я видел, не очень ясна по этому вопросу, и у меня не было никакого успеха, используя строки C++.

2 ответа

Я не имел никакого успеха с использованием строк 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++ с этими изменениями, перезапустил его набор для самопроверки, и он дал те же результаты, что и раньше. Если бы структура таблицы изменилась, я бы ожидал, что многие тесты не пройдут.

Итак, вы должны делать что-то еще, но я не могу догадаться, что из вашего вопроса.

Вы должны взглянуть на http://tangentsoft.net/mysql++/doc/html/userman/tutorial.html

Например, чтобы произвести:

SELECT * FROM stock WHERE item = 'Hotdog Buns'

Ты можешь использовать:

string s = "Hotdog Buns";
query << "SELECT * FROM stock WHERE item = " << quote_only << s;
Другие вопросы по тегам