我想出了一个使用内部二进制数据的灵活解决方案std::string
。
我提出了这个新的解决方案,因为当前的答案是旧的(2013 年),我正在寻找一个使用 pqxx 5.0.1 的多插入查询。
使用下面的解决方案,您可以灵活地使用 afor loop
在单个插入查询中附加多个二进制数据。
CustomStruct data = .... ; // have some binary data
// initialise connection and declare worker
pqxx::connection conn = new pqxx::connection(...);
pqxx::work w(conn);
// prepare query
string query += "INSERT INTO table (bytea_field) VALUES ("
// convert your data in a binary string.
pqxx::binarystring blob((void *)&(data), data.size());
// avoid null character to bug your query string.
query += "'"+w.esc_raw(blob.str())+"');";
//execute query
pqxx::result rows = w.exec(query);
当我们要从数据库中检索数据时,您应该具有数据类型的范围(CustomStruct
例如),并且您应该能够将其转换为您选择的二进制格式。
// assuming worker and connection are declared and initialized.
string query = "SELECT bytea_field FROM table;";
pqxx::result rows = w.exec(query);
for(pqxx::result::iterator col = rows.begin(); col != rows.end(); ++col)
{
pqxx::binarystring blob(col[0]);
CustomStruct *data = (CustomStruct*) blob.data();
...
}
这是用pqxx 5.0.1
,c++11
和postgresSQL 9.5.8