Добавление строк в запросы 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;