2013-04-30 84 views
1

我有一個關於在Qt中使用數據庫的問題。在大型應用程序中使用Qt數據庫

在其他語言中,我會做類似於在主類中創建數據庫並將此數據庫的指針傳遞給其他類以使用。

我一直在Qt中玩耍,似乎如果我在主類中初始化一個數據庫,那麼我可以在任何其他類中編寫和執行查詢,它將使用此數據庫,因爲我有點困惑,因爲似乎沒有提及數據庫。

有人能解釋這對我來說:)

這裏是一個在MainWindow.cpp實例化數據庫類

#include "database.h" 

Database::Database() 
{ 
    Connect(); 
} 

void Database::Connect() 
{ 
    db = QSqlDatabase::addDatabase("QSQLITE"); 
    db.setDatabaseName("mydatabase­.dat"); 

    if(db.open()){ 
     qDebug() << "Connected"; 
    } 
    else 
    { 
     qDebug() << "Not Connected"; 
    } 
} 

bool Database::SetupTables() 
{ 
    QSqlQuery qry; 

    qry.exec("CREATE TABLE patients (patient_id INT, firstname VARCHAR(100), lastname VARCHAR(100)); "); 

    return true; 
} 

這是在Window(窗口小部件),我創建了名爲PatientList

#include "patientlist.h" 
#include "ui_patientlist.h" 
#include "database.h" 
#include <QtSql> 
#include <QtDebug> 

PatientList::PatientList(QWidget *parent) : 
    QWidget(parent), 
    ui(new Ui::PatientList) 
{ 
    ui->setupUi(this); 

    QSqlQuery qry; 
    if(qry.exec("SELECT patient_id,firstname,lastname FROM patients")){ 
     qDebug() << "Success"; 
    } 
    else 
    { 
     qDebug() << "Error"; 
    } 

} 

PatientList::~PatientList() 
{ 
    delete ui; 
} 

這一切工作正常,但我只是覺得我做錯了什麼,因爲我沒有提到在MainWindow.cpp中創建的數據庫

+0

你能告訴我們一些示例代碼嗎?這是非常含糊 – cppguy 2013-04-30 21:50:52

+0

添加到帖子 – Liam 2013-04-30 22:01:49

回答

0

沒有看到你的主要使它很難,但它看起來像QSqlQuery足夠聰明,拿起你的「默認」數據庫。在這裏看到:所以只要

http://qt-project.org/doc/qt-4.8/qsqlquery.html#QSqlQuery-2

因爲你在你的數據庫看到的價值觀,我會說這只是一個做的事情不一定是直觀的,但最終很容易使用Qt的例子。

2

從Qt文檔上QSqlDatabase

連接是由自己的名字衆所周知,而不是由 數據庫,它連接的名稱。您可以有多個連接到一個 數據庫。 QSqlDatabase還支持默認連接的概念,即未命名連接。要創建默認的 連接,請在調用 addDatabase()時不要傳遞連接名稱參數。隨後,當您調用任何採用連接名稱參數的靜態成員函數 時,如果未通過連接名稱參數 ,則會採用默認連接。

那麼,我認爲這是說明了一切。請注意,QSqlDatabase不能直接實例化。直接創建QSqlDatabase的實例只會產生無效的連接。顯然,QSqlDatabase只是實際連接對象的鏈接(可能是靜態分配的)。由於許多應用程序可能只使用一個數據庫連接,因此默認情況下會單擊一個鏈接。

我不確定這是否在每個應用程序或每個線程的基礎上完成。

相關問題