2013-02-17 78 views
0

我正在嘗試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 << "));"; 

其中的tablenamefieldName1fieldName2都是某些類型的字符串變量,可以在運行時修改,以便用戶可以在應用程序運行時定義表和字段名稱(以及更高版本的表數據)。這樣的事情可能嗎?如果是這樣,怎麼樣?我見過的文檔不太清楚,我沒有使用C++字符串取得任何成功。

回答

-1

你應該看看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; 
+0

我得到一個錯誤」'quote_only'沒有在此範圍內聲明「我是否需要包含另一個頭文件,到目前爲止它只是:#include #include 「/usr/include/mysql++/cmdline.h」 #include #include Knet 2013-02-17 21:13:33

+0

嘗試包括manip.h! http://tangentsoft.net/mysql++/doc/html/refman/manip_8h.html – Fafhrd 2013-02-17 21:31:17

+0

@Fafhrd:不,你不需要直接#include'manip.h'。它被'mysql ++。h'間接包含,OP說他包含了。我敢打賭這是一個名稱空間問題。他或者需要在這個代碼上面說'使用namespace mysqlpp',或者將操縱符限定爲'mysqlpp :: quote_only'。 – 2013-02-19 01:37:21

0

我沒有使用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 ++這些變化,重新運行自檢套件,它提供了完全相同的測試結果之前。如果表結構已更改,我預計很多測試都會失敗。

所以,你一定在做別的事情,但我無法猜出你的問題。 「