我想出了利用內幕std::string
二進制數據的靈活解決方案。
我提出這個新的解決方案,因爲目前的答案是舊的(2013年),我一直在尋找使用pqxx 5.0.1多插入查詢。
通過該解決方案波紋管,你必須使用一個for 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
來源
2017-08-30 22:52:47
LAL
我喜歡你的解決方案測試,但我不喜歡使用conn.prepare。當我有'n'元素插入一個查詢(性能問題)時,它限制了我。我正在研究解決方案(使用pqxx 5.0.1)。 – LAL