先给一个简单的数据库链接代码,调试通过可以看到数据结果,给这个是为了避免有人以为我数据库配错了或者其他代码错了。
QSqlDatabase MainWindow:: iniDBConnect(QString Server, QString UserName, QString Password, QString Database)
{
QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL");
db.setHostName(Server);
db.setUserName(UserName);
db.setPassword(Password);
db.setDatabaseName(Database);
return db;
}
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
QSqlDatabase db = iniDBConnect(QString("localhost"),QString("gxx"),QString(""),QString("information_schema"));
bool bOpen = db.open();
//... 以下查询数据部分省略,结果界面上view内能看到数据。
}
好了我现在想把 iniDBConnect函数返回改成指针,现在代码改成以下格式,编译通过,运行到数据库open时liunx报系统底层错误,我想用qt的内存查看器查一下但是不会用,我不知道是为什么。请问哪位高手知道
QSqlDatabase * MainWindow:: iniDBConnect(QString Server, QString UserName, QString Password, QString Database)
{
QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL");
db.setHostName(Server);
db.setUserName(UserName);
db.setPassword(Password);
db.setDatabaseName(Database);
return &db;
}
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
try
{
QSqlDatabase * db = iniDBConnect(QString("localhost"),QString("gxx"),QString(""),QString("information_schema"));
bool bOpen = (*db).open(); //编译通过,执行这句代码时报liunx底层错误
如果有人能准确回答我会增加到100分的,虽然我觉得能真正回答这道题目的人应该不会在呼100分吧,先在此谢过。
------解决方案--------------------
QSqlDatabase * MainWindow:: iniDBConnect(QString Server, QString UserName, QString Password, QString Database)
{
QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL"); // 此处db为局部变量,函数出栈后自动析构
db.setHostName(Server);
db.setUserName(UserName);
db.setPassword(Password);
db.setDatabaseName(Database);
return &db; // 返回一个地址,返回后地址无效
}
------解决方案--------------------
没明白你为啥非用返回指针,好了,你返回指针出可以,但不能返回&db这种方式,因为返回前db已经析构了。
QSqlDatabase * MainWindow:: iniDBConnect(QString Server, QString UserName, QString Password, QString Database)
{
QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL");
db.setHostName(Server);
db.setUserName(UserName);
db.setPassword(Password);
db.setDatabaseName(Database);
return new QSqlDatabase(db);
}
------解决方案--------------------
QSqlDatabase * MainWindow:: iniDBConnect(QString Server, QString UserName, QString Password, QString Database)
{
QSqlDatabase* db = new QSqlDatabase::addDatabase("QMYSQL"); // 在堆上建立
db.setHostName(Server);
db.setUserName(UserName);
db.setPassword(Password);
db.setDatabaseName(Database);
return db; // 返回一个地址,返回后地址依然有效,不过注意 手动 释放 db
}