我使用libpqxx通过创建类来连接到postgres数据库。
class databaseConnection
{
public:
pqxx::connection* conn;
void SetConnection(){
conn=new pqxx::connection(
"username=temp "
"host=db.corral.tacc.utexas.edu "
"password=timelione "
"dbname=temp");
}
void Disconnect(){
conn->disconnect();
}
pqxx::result query(std::string strSQL){
//SetConnection();
pqxx::work trans(*conn,"trans");
pqxx::result res=trans.exec(strSQL);
trans.commit();
return res;
}
};
int main()
{
databaseConnection* pdatabase;
pdatabase->SetConnection();
return 0;
}
我收到的错误是
terminate called after throwing an instance of 'pqxx::broken_connection'
what(): invalid connection option "database"
任何人都可以帮助我吗?
由于
答案 0 :(得分:9)
pgxx::connection(const PGSTD::string&)
基本上是libpq的PQconnectdb()
函数的包装器,因此支持的连接参数关键字与libpq相同。
要连接的PostgreSQL用户名的参数关键字user
,而不是username
。也许纠正这将解决问题。
此外,在您的示例代码中,pdatabase
是未初始化的指针。您可以在堆栈上分配databaseConnection
对象:
databaseConnection database;
database.SetConnection();
或使用new
堆分配databaseConnection
对象:
databaseConnection* pdatabase = new databaseConnection();
pdatabase->SetConnection();
但你需要选一个。
答案 1 :(得分:3)
如果你这样尝试
try
{
conn = new pqxx::connection(
"username=temp "
"host=db.corral.tacc.utexas.edu "
"password=timelione "
"dbname=temp");
}
catch (const std::exception &e)
{
std::cerr << e.what() << std::endl;
}
它捕获有关连接字符串的异常:
invalid connection option "username"
答案 2 :(得分:0)
您可能还需要在连接字符串中添加port=5432
。