2016-09-06 12 views
0

で動的SQLという名前のテーブルを作成します。次のコードは、POCOに「テスト」という名前のテーブルを作成し、POCO

#include "Poco/Data/Session.h" 
#include "Poco/Data/SQLite/Connector.h" 

#include <string> 

using namespace Poco::Data::Keywords; 
using Poco::Data::Session; 

int main(int argc, char** argv) 
{ 
    Poco::Data::SQLite::Connector::registerConnector(); 
    Session session("SQLite", "test.db"); 
    session << "CREATE TABLE test (id INTEGER)", now; 
    return 0; 
} 

私は与えられた引数に基づいて命名テーブルを作成する機能を書きたいです。私は使用すると思っただろう

int main(int argc, char** argv) 
{ 
    Poco::Data::SQLite::Connector::registerConnector(); 
    Session session("SQLite", "test.db"); 
    std::string name = "test"; 
    session << "CREATE TABLE ? (id INTEGER)", bind(name), now; 
    return 0; 
} 

ワイルドカード文字を使用して、指定された名前に置き換えます。私はそれを理解するので、私はbind(与えられた値をコピーする)を必要とすべきではなく、nowで終わっているので、useで十分であるはずです。

私が使用するキーワード(usebinduseRef)にかかわらず、プログラムは「SQLエラーまたはデータベースがありません」というエラーをスローします。

また、Statementを作成してみましたが、テーブルを作成しても変更はありません。

何か間違っていますか?この呼び出しではワイルドカード置換は許可されていませんか?手動でコールを変更する必要はありますか?

私の#includesから推測できるとおり、私はSQLiteを使用しています。

答えて

0

printfフォーマット指定子を使用すると、ここで動作します。だから、文はこの文にそれが呼ばれていますたびに再コンパイルが必要ですので、私はこれが(私は複数の類似のテーブルを作成したい場合は何?)必要な理由わからないんだけど、C'EST

int main(int argc, char** argv) 
{ 
    Poco::Data::SQLite::Connector::registerConnector(); 
    Session session("SQLite", "test.db"); 
    std::string name = "test"; 
    session << "CREATE TABLE %s (id INTEGER)", name, now; 
    return 0; 
} 

をする必要がありますla対

関連する問題