我正在使用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;
}
Run Code Online (Sandbox Code Playgroud)
我收到错误的说法
terminate called after throwing an instance of 'pqxx::broken_connection'
what(): invalid connection option "database"
Run Code Online (Sandbox Code Playgroud)
谁能帮我吗?
谢谢
Dan*_*ien 10
pgxx::connection(const PGSTD::string&)基本上是libpq PQconnectdb()函数的包装器,因此支持的连接参数关键字与libpq相同.
PostgreSQL用户名的参数关键字按原样连接user,而不是username.也许纠正这将解决问题.
此外,在您的示例代码中,pdatabase是一个未初始化的指针.您可以databaseConnection在堆栈上分配一个对象:
databaseConnection database;
database.SetConnection();
Run Code Online (Sandbox Code Playgroud)
或者用于new堆分配databaseConnection对象:
databaseConnection* pdatabase = new databaseConnection();
pdatabase->SetConnection();
Run Code Online (Sandbox Code Playgroud)
但你需要选一个.
如果你像这样尝试
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;
}
Run Code Online (Sandbox Code Playgroud)
它捕获有关连接字符串的异常:
invalid connection option "username"
Run Code Online (Sandbox Code Playgroud)