QSqlDatabasePrivate::addDatabase: 重复连接名称“MyConnection”错误
Posted
技术标签:
【中文标题】QSqlDatabasePrivate::addDatabase: 重复连接名称“MyConnection”错误【英文标题】:QSqlDatabasePrivate::addDatabase: duplicate connection name 'MyConnection' error 【发布时间】:2017-09-20 04:33:25 【问题描述】:我用 C++ 编写了一个 Qt 程序,以便访问数据库并将数据库表加载到表视图中!我的程序没有显示任何编译错误,但给出了 2 个运行时错误
QSqlDatabasePrivate::removeDatabase: connection 'MyConnection' is still in use, all queries will cease to work.
QSqlDatabasePrivate::addDatabase: duplicate connection name 'MyConnection', old connection removed.
主要有MainWindow(有数据库连接方法)和Dialog类 以下是我的代码
MainWindow.h
class MainWindow : public QMainWindow
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public: QSqlDatabase mydb;
bool conOpen(QString userName,QString password,QString hostname,int port,QString service)
mydb=QSqlDatabase::addDatabase("QOCI","MyConnection");
mydb.setUserName(userName);
mydb.setPassword(password);
mydb.setHostName(hostname);
mydb.setPort(port);
mydb.setDatabaseName(service);
return mydb.open();
MainWindow.cpp
void MainWindow::on_pushButton_clicked()
Dialog *dialog1 = new Dialog(this);
if(conOpen(ui->uname->text(),ui->pword->text(),ui->ip->text(),ui->port->text().toInt(),ui->service->text()))
dialog1->show();
Dialog.h
class Dialog : public QDialog
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
private slots:
void on_pushButton_clicked();
Dialog.cpp
void Dialog::on_pushButton_clicked()
QSqlQueryModel *modal = new QSqlQueryModel();
if(QSqlDatabase::contains("MyConnection"))
QSqlQuery* qry=new QSqlQuery(QSqlDatabase::database("MyConnection"));
qry->prepare("select NAME FROM Employees");
qry->exec();
modal->setQuery(*qry);
ui->tableView->setModel(modal);
MainWindow 表单用于登录,Dialog 表单用于将数据库表中的条目检索到表视图 我该如何纠正这个问题?
【问题讨论】:
您是否多次按下该按钮? @HiI'mFrogatto 是的!我在 MainWindow 中按下了几次按钮,但问题是虽然我按下了按钮,但没有出现 dialog1 :( 这就是问题所在。QSqlDatabase::addDatabase
不应该被多次调用。
是的,但是为什么当我单击按钮时没有出现dialog1? :(
你试过调试你的程序吗? dialog1->show();
是第一次调用吗?
【参考方案1】:
QSqlDatabase::addDatabase
是一个静态函数,每次调用它都会创建一个连接实例。因此,如果您的应用设计为仅与数据库服务器建立单一连接,则不应多次调用它。
QSqlDatabase QSqlDatabase::addDatabase(const QString &type, const QString &connectionName = QLatin1String( defaultConnection ))
使用驱动程序将数据库添加到数据库连接列表中 类型和连接名称
connectionName
。如果已经存在一个 名为connectionName
的数据库连接,该连接被删除。
您可能需要将打开数据库代码(包括QSqlDatabase::addDatabase
)的逻辑移动到整个应用程序中只调用一次的地方。
【讨论】:
谢谢!问题是当我单击按钮时没有出现dialog1!但是为什么没有出现呢? @KushanPeirisconOpen
的返回值可能是false
。以上是关于QSqlDatabasePrivate::addDatabase: 重复连接名称“MyConnection”错误的主要内容,如果未能解决你的问题,请参考以下文章