Qt程序在连接到QPSQL失败时崩溃

时间:2017-10-20 09:19:05

标签: postgresql qt

我试图通过交叉电缆或无线连接到QPSQL数据库。当我输入正确的详细信息时,一切都很好,但如果我输入错误的详细信息,程序崩溃而不是给我qDebug消息为什么?

const char* driverName = "QPSQL";
QSQLDbHelper* qSQLDbHelper = new QSQLDbHelper(driverName);
postgres_db = qSQLDbHelper->connect(host,database,username,password,port);

if(postgres_db->open())
{
    qDebug() <<"Opened Postgres Database"<< postgres_db->open();
}
else
{
    qDebug() << "Something went Wrong:" << postgres_db->lastError().text();
}
qSQLDbHelper->disConnect();
delete qSQLDbHelper;

void QSQLDbHelper::disConnect()
{
    qDebug() << "Disconnected From Postgres Database!";
    postgres_db->close();
}

1 个答案:

答案 0 :(得分:3)

连接失败QSqlDatabase* QSQLDbHelper::connect( const QString& server, const QString& databaseName, const QString& userName, const QString& password ) { db->setConnectOptions(); db->setHostName(server); db->setDatabaseName(databaseName); db->setUserName(userName); db->setPassword(password); if(db->open()) { return db; } else { return NULL; } } 返回NULL:

qDebug() << "Something went Wrong:" << NULL->lastError().text();

所以你这样做:

if(postgres_db->open())

编辑:在我的回答中添加几点:

您正在connect(),但QSqlDatabase* QSQLDbHelper::connect( const QString& server, const QString& databaseName, const QString& userName, const QString& password ) { db->setConnectOptions(); db->setHostName(server); db->setDatabaseName(databaseName); db->setUserName(userName); db->setPassword(password); return db; } 已经这样做了。

为了让您的代码能够正常工作,您可以编辑连接功能:

postgres_db

但是当然它不会进行实际连接,而是设置它的属性,所以名称会有点混乱。

替代方法是测试qSQLDbHelper->db的NULL并通过创建某种getter或将其更改为public来访问私有属性{{1}}。