如何为所有表单声明公共数据库

时间:2017-05-01 18:40:40

标签: c++ qt sqlite

我有一个atm应用程序,要求数据库始终打开(用户登录,所有信息都会收集并显示在下一个表单上)。目前我在每个表单的开头添加数据库,但我想知道是否有一种方法让我在程序开始时自动通过db.start()和db.end()函数在公共中访问它类。

atmDB = QSqlDatabase::addDatabase("QSQLITE");
atmDB.setDatabaseName(Path_to_DB);
QFileInfo checkFile(Path_to_DB);

if(!atmDB.open()){
    ui->regStatus->setText("No connection to log-in database!");
}
else
    ui->regStatus->setText("Database connected!");enter code here

我在everys表单源文件的开头有这个。

2 个答案:

答案 0 :(得分:3)

看看下面的做法对你有用..

mainwindow构造函数中添加数据库并提供连接名称。

QSqlDatabase atmDB = QSqlDatabase::addDatabase("QSQLITE","myConnection");
//Do all DB settings
atmDB.setDatabaseName(.....);
atmDB.setUserName(.....);
atmDB.setPassword(.....); 

现在在您的.cpp文件中,您需要调用::database并使用它...

QSqlDatabase mydb = QSqlDatabase::database("myConnection",true);//by defualt second parameter is true,which opens the connection.
//
//
//YOUR BUSINESS
// 
//
mydb.close();

::addDatabase::database都是QSqlDatabase的静态函数。

所以上面的做法应该有效。

答案 1 :(得分:0)

你应该定义一个单例实例类,并在其中设置数据库,如

class DB
{
public:
static DB& instance();
bool getDB();
bool isOpen();
bool open();
bool close();
}

和函数

bool getDB()
{
Mutex mutex;
if (!isOpen())
{
return open();
}
return true;
}

所以你的主要功能

int main()
{
DB::instance().open()
// you code...
DB::instance().close();
}