使用libpqxx连接到Postgres数据库
问题描述:
我正在使用libpqxx通过创建一个类来连接到postgres数据库。使用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"
谁能帮助我吗?
感谢
答
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();
但是,你需要选择一个。
答
您可能还需要将port=5432
添加到连接字符串中。
答
如果试图这样
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"
为什么你不使用libpq的? –
@Gaurav有丹尼尔的回答对你有帮助吗?如果是这样,请接受它。我面临类似的问题,如果你不接受它,我们大多数新用户不会知道这是否是一个解决方案。毕竟,他花时间来帮助你,你应该至少感谢。 – itsols