我真的不明白以下行為:
3 代碼片段解釋
sqlconnection.h
class SqlConnection
{
public:
SqlConnection();
QSqlDatabase db;
} ;
sqlconnection.cpp
SqlConnection::SqlConnection()
{ if (!db.open()){ //no different with or without that
db = QSqlDatabase::addDatabase("QODBC");
...
}
artikelverwaltung.cpp
Artikelverwaltung::Artikelverwaltung(){
SqlConnection().db.open();
...(code to do works fine)
}
void Artikelverwaltung::on_pushButton_2_clicked()
{
SqlConnection().db.close(); // "HERE"
}
“這里”它再次回圈整個類的建構式,但為什么它不只是關閉連接?(這是關于以及如何解決這個問題的主要問題。)
我什至無法從類內部但建構式外部的另一個方法訪問“db”,例如:
sqlconnection.cpp:
void closeDB() {db.close();}不可能。`
我做錯了什么?
謝謝你們
uj5u.com熱心網友回復:
通常,您不需要使用任何包裝類來保存 Qt 中的資料庫連接。QSqlDatabase::addDatabase您應該在使用并打開它后創建一個資料庫連接。QSqlDatabase::database之后,您可以通過呼叫靜態方法在任何地方獲得資料庫連接。因此,要關閉資料庫連接,您只需呼叫QSqlDatabase::database().close().
uj5u.com熱心網友回復:
您好,歡迎來到 Stackoverflow!
如果您呼叫SqlConnection().db.close();,您實際上是在創建 SqlConnection 類的新實體,然后在其變數 db 上呼叫 close()。這不是您之前打開的那個。
你想要做的是在你的 Artikelverwaltung 課程中:
SqlConnection sqlConnection = new SqlConnection();
然后稍后
sqlConnection.db.open();
之后
sqlConnection.db.close();
無法添加該closeDB()方法的原因是您需要將方法放在SqlConnection類中,或者您需要對類的實體進行操作。
如果不實體化它(創建它的實體),就不能對這樣的類進行操作。
您應該查看類實體化以了解該概念的作業原理。
如果您呼叫SqlConnection(),您正在創建該類的一個新實體(您可以將其視為該類的副本)。
如果您在SqlConnection()其他地方呼叫,您只是在創建一個新實體。
這些實體不共享變數或其中的內容。他們是完全獨立的。
如果不首先創建類的實體然后訪問該實體的成員,則無法訪問類的成員(如您的 db 變數)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/476827.html
