我试图通过交叉电缆或无线连接到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();
}
答案 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}}。