2017-07-19 158 views
0

我正在使用c + + PostgreSQL libpqxx库,我不知道为什么我无法打开事务/非事务对象。C++ pqxx工作事务崩溃

我的代码是目前如下

#include <iostream> 
#include <pqxx/pqxx> 

using namespace std; 
using namespace pqxx; 

int main() { 

    // define variables 
    string params; 
    connection* pgsql; 
    string sql; 

    // db connection parameters 
    params = "dbname=dummy user=postgres password=postgres hostaddr=10.10.0.2 port=5431"; 

    try { 
     // make connection 
     pgsql = new connection(params); 
    } catch(const exception &log) { 
     // connection failed 
     cerr << log.what() << endl; 
    } 

    // prepare sql 
    sql = " select * from categories where cat_idno = $1 "; 
    pgsql->prepare("categories", sql)("integer"); 

    // execute transaction 
    // this bit doesn't work 
    work tr(pgsql); 
    result row = tr.prepared("categories")(1).exec(); 
    tr.commit(); 

    // disconnect 
    pgsql->disconnect(); 

} 

它使得与数据库的连接就好了,准备我的SQL罚款很好,但它未能编译(我编译在CentOS 5 BTW)

g++ -o ./pgsqltest ./pgsqltest02.cpp -lpqxx 

给了我下面的错误

./pgsqltest02.cpp: In function ‘int main()’: 
./pgsqltest02.cpp:24: error: no matching function for call to ‘pqxx::transaction<read_committed, read_write>::transaction(pqxx::connection*&)’ 
/usr/include/pqxx/transaction.hxx:102: note: candidates are: pqxx::transaction<ISOLATIONLEVEL, READWRITE>::transaction(pqxx::connection_base&) [with pqxx::isolation_level ISOLATIONLEVEL = read_committed, pqxx::readwrite_policy READWRITE = read_write] 
/usr/include/pqxx/transaction.hxx:97: note: pqxx::transaction<ISOLATIONLEVEL, READWRITE>::transaction(pqxx::connection_base&, const std::string&) [with pqxx::isolation_level ISOLATIONLEVEL = read_committed, pqxx::readwrite_policy READWRITE = read_write] 
/usr/include/pqxx/transaction.hxx:87: note: pqxx::transaction<read_committed, read_write>::transaction(const pqxx::transaction<read_committed, read_write>&) 

我不知道为什么会,也许我错过了一些非常明显的东西

回答

0

错误与编译命令有关,它需要额外的参数指向libpqxx头文件和二进制文件。正确的编译命令是

g++ -o ./pgsqltest ./pgsqltest02.cpp -I /opt/libpqxx/include -L /opt/libpqxx/lib -lpq -lpqxx