gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 14:16:33 26 4
gpt4 key购买 nike

我正在尝试通过交叉电缆或无线连接到 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();
}

最佳答案

连接失败 connect() 返回 NULL:

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;
}
}

所以你正在这样做:

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 是否为 NULL,并通过创建某种 getter 或将其更改为公共(public)属性来访问私有(private)属性 qSQLDbHelper->db

关于postgresql - Qt 程序在连接到 QPSQL 失败时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46846015/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com