作者:秋凉凉_e1998 | 来源:互联网 | 2023-02-09 15:53
我无法使用qt应用程序连接到我的sqlite数据库。我有一个帮助程序类DBManager,它应该具有打开和关闭数据库的功能,因为我想在多个地方重用代码。这是dbmanager.cpp
DBManager::DBManager()
{
}
void DBManager::connOpen()
{
path = QCoreApplication::applicationDirPath() + "/GameSuitedb.db";
mydb=QSqlDatabase::addDatabase("QSQLITE");
mydb.setDatabaseName(path);
void DBManager::connClose() /*Closes connection and commits changes to database*/
{
mydb.close();
mydb.removeDatabase(QSqlDatabase::defaultConnection);
}
请注意,我的数据库名为GameSuitedb,位于可执行文件的旁边,这是我尝试访问数据库的位置:
void CreateUser::on_pushButton_submit_clicked()
{
dbmanager.connOpen();
QString username = ui->lineEdit_username->text();
QString password = ui->lineEdit_password->text(); //Gets password text
QSqlQuery qry(dbmanager.mydb);
qry.prepare("INSERT INTO users (username,password) VALUES ('"+username+"', '"+password+"')");
if(qry.exec()){
}
else{
ui->statusbar->showMessage(qry.lastError().text());
}
dbmanager.connClose();
}
上面的代码在启动时给我的错误是QSqlQuery :: prepare:数据库未打开。
1> Vada Poché..:
错误代码告诉您数据库未打开,因为您的DBManager::connOpen()
函数除了实际打开数据库外似乎正在执行所有操作,这与其命名方式相反。
您需要QSqlDatabase::open()
在DBManager::connOpen()
函数末尾进行调用,以便打开数据库并准备使用数据库。
void DBManager::connOpen()
{
path = QCoreApplication::applicationDirPath() + "/GameSuitedb.db";
mydb=QSqlDatabase::addDatabase("QSQLITE");
mydb.setDatabaseName(path);
if(!mydb.open())
{
//use lastError() here to figure out what went wrong.
}
}