我有一个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表单源文件的开头有这个。
答案 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();
}