0

私は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 << "));";

ここで、tableNamefieldName1、およびfieldName2はすべて、アプリケーションの実行中にユーザーがテーブル名とフィールド名 (およびその後のテーブル データ) を定義できるように、実行時に変更できる何らかのタイプの文字列変数です。そのようなことは可能ですか?もしそうなら、どのように?私が見たドキュメントはこれについてあまり明確ではなく、C++ 文字列を使用しても成功していません。

4

2 に答える 2

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++ を再構築し、セルフテスト スイートを再実行したところ、以前とまったく同じテスト結果が得られました。テーブル構造変更されていれば、多くのテストが失敗することが予想されます。

だから、あなたは何か他のことをしているに違いありませんが、あなたの質問から何を推測することはできません.

于 2013-02-19T01:33:15.357 に答える
-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;
于 2013-02-17T20:55:58.673 に答える