2017-03-29 15 views
1

私はPOCOフレームワークを使用してSQLiteのBLOBカラムにデータを保存するためにバイナリデータをバインドしようとしていますが、SQLiteラッパーを使用してPOCOフレームワークでBLOBのデータをバインドする

マイコード:

#include <Poco/Data/Session.h> 
#include <Poco/Data/SessionPool.h> 
#include <Poco/Data/SQLite/Connector.h> 

。 。 。

const std::string dbSchemeDemo = 
    "CREATE TABLE IF NOT EXISTS `demo` (" 
    "\n\t`key`\tTEXT NOT NULL," 
    "\n\t`value`\tINTEGER DEFAULT NULL," 
    "\n\t`data`\tBLOB DEFAULT NULL," 
    "\n\tPRIMARY KEY(`key`)" 
    "\n);" 
    "\nCREATE INDEX IF NOT EXISTS idx_key ON demo(key);"; 

std::string sqlQueryDemo = 
    "INSERT INTO demo" 
    " (key, value, data)" 
    " VALUES(?, ?, ?)"; 


auto dbPoolDemo = std::make_unique<Poco::Data::SessionPool>(Poco::Data::SQLite::Connector::KEY, "demo.db3"); 

Poco::Data::SQLite::Connector::registerConnector(); 

Poco::Data::Session dbDemo(dbPoolDemo->get()); 
dbDemo.setConnectionTimeout(2); 
dbDemo << "PRAGMA foreign_keys = ON;", Poco::Data::Keywords::now; 
dbDemo << dbSchemeDemo, Poco::Data::Keywords::now; 

std::vector<unsigned char> data{ '0', '0', '0', '0', '0', '0', '0', '0', '0', '0' }; 

Poco::Data::Statement insertDemo(dbDemo); 
insertDemo << sqlQueryDemo, 
    Poco::Data::Keywords::bind("ABCD"), 
    Poco::Data::Keywords::bind(Poco::Nullable<int>(1)), 
    Poco::Data::Keywords::bind(Poco::Nullable<std::vector<unsigned char>>(data)), 
    Poco::Data::Keywords::now; 

「実装されていません」という例外は除外されています。任意のアイデア、どのようにベクトルからバイナリデータをバインドするには?どうもありがとう!美しい心で

答えて

0

、私は簡単な解決策を発見した - ポコすることにより、データをラップ::データ:: BLOBのテンプレートクラス:

Poco::Data::BLOB data(std::vector<unsigned char>({ '0', '0', '0', '0', '0', '0', '0', '0', '0', '0' })); 

以降NULLを格納するために

Poco::Data::Keywords::bind(Poco::Nullable<Poco::Data::BLOB>(data)), 

をバインド空のベクトル(Poco :: Nullableで囲まれた)を使うことができます。 解決策は次のとおりです。

Poco::Data::BLOB data(std::vector<unsigned char>({ '0', '0', '0', '0', '0', '0', '0', '0', '0', '0' })); 

    Poco::Data::Statement insertDemo(dbDemo); 
    insertDemo << sqlQueryDemo, 
     Poco::Data::Keywords::bind("ABCDEFG"), 
     Poco::Data::Keywords::bind(Poco::Nullable<int>(1)), 
     Poco::Data::Keywords::bind(Poco::Nullable<Poco::Data::BLOB>(data)), 
     Poco::Data::Keywords::now; 
関連する問題